Gibt es in BlueJ eine Methode, mit welcher man prüfen kann, ob sich zwei Bilder übereinander befinden?
Wir müssen in Informatik ein Spiel progammieren und haben uns für Flappy Bird entschieden. Bei uns bewegt sich mitlerweile schon der Hintergrund. Der Vogel soll sich nur in vertikale Richtung bewegen. Oben und unten werden sollen Bilder von Säulen eingefügt werden. Falls diese vom Vogel berührt werden, soll die Ausführung beeendet werden. Wir brauchen also eine Methode oder Vorhergehensweise um abzugleichen, ob sich der Vogel im Bereich der Säule befindet.
4 Antworten
Also BlueJ ist keine Programmiersprache, sondern ein Editor.
Mit welcher Sprache arbeitet ihr?
Ich würde das nicht mit Bildabgleich machen, sondern mit Pixeln. Einfach vergleichen, ob Säule und Vogel gleiche Pixel haben. Wenn das der Fall ist, dann hast du verloren.
Üblicherweise nimmt man 2 Rechtecke, die "Hitframes" (oft, aber nicht immer, identisch mit den Rechtecken, in denen die Bilder sich befinden)
Dann kann man in Java mit der Rectangle.intersects()-Methode bzw. in C# mit der Rectangle.IntersectsWith()-Methode testen, ob die Rechtecke sich überschneiden.
Wenn ihr es wirklich pixelgenau haben wollt, nehmt ihr am besten die Rechtecke, in denen sich die Grafiken befinden, und ermittelt mit Rectangle.intersection() (Java), Rectangle.Intersect() (C#) bzw. der Entsprechung in eurer Programiersprache das Rechteck, in dem die Bilderrahmen sich überschneiden.
Zu jedem der Bilder ermittelt ihr das Offset des Schnittrechtecks zum betreffenden Rahmen.
Für jeden Punkt des Schnittrechtecks prüft ihr (mit Hilfe der Offsets), ob sich dort in beiden Bildern (UND-Operation) ein Pixel befindet, das nicht die transparente Farbe hat, bzw. wo die Transparenzmaske "undurchsichtig" markiert. Wenn ein solcher Punkt gefunden wird, gibt eure HitTest()-Methode true zurück, sonst false.
Ein spiel in BlueJ wird etwas... naja. Du kannst überprüfen ob sich die Koordinaten der Bildpos überschneiden.
BlueJ ist ein Editor, keine Programmiersprache! Arbeitet ihr mit OOP? Dann wäre es sinnvoll eine Klasse "Obstacle" zu erstellen und für jede Säule zu instanziieren und dann halt mit dem Vogel-Objekt einen Kollisionscheck zu schreiben...