Image Position erkennen

The-Forgotten

Bekanntes Mitglied
Hi,

ich arbeite zur Zeit an nem kleinen Spiel und brauch fachmännischen Rat:

Kann ich checken ob an der stelle X/Y ein Image gezeichnet wurde oder geht das nur, indem ich erst alle X Werte und die entsprechenden Y Werte vergleiche?

Ich dachte ich finde da ne nette Methode, nach dem Motto: "getImageAt", aber das gibts ja nur für Componenten und zumindest diese funktioniert bei Images nicht.

Ich will also checken, ob ein Image dort ist und nicht ob dort kein Image ist.

PS: Ist das auch schneller?
 
Klingt seltsam. Wenn das Bild erstmal mit
graphics.drawImage(image, x, y, null);
gezeichnet wurde, kommt man da kaum noch dran. Man sollte sich stattdessen genau bei diesem Aufruf das x und y merken, dann spart man sich irgendwelche ... fragwürdigen Überprüfungen...
 
Genau, es geht um Kollisionserkennung ... die Kollisionserkennung selbst habe ich schon, nur stellt sich für mich noch folgende Frage:

Für die momentante Kollisionserkennung muss ich bei jedem durchlauf der Spielschleife überprüfen ob die objekte sich schneiden, gemäß dem Tutorial von hier.

Nun dachte ich mir, wenn ich nun z.B. 80 verschiedene Objekte habe, die zum Teil nichtmal im aktuellen Ausschnitt sind, wäre es für das Spiel doch schneller zu checken ob da ein Image vor dem Spieler Image ist oder nicht, anstatt jedesmal alle 80 objekte auf übschneidung zu überprüfen.

Ich will die Geschwindigkeit ein bisschen aufpeppen um auch sicherzustellen, dass es auch auf vergleichsweise(mit dem PC) sehr schwachen Geräten läuft.
 
Wenn man z.B. das "Spielerbild" immer in der Mitte des aktuellen Spielausschnitts hat, und 80 andere Objekte irgendwo ganz weit weg, bräuchte man die weit entfernten Objekte eigentlich nicht zu testen. Aber jeder Test (z.B. ob die Bilder außerhalb des sichtbaren Bereiches liegen) wäre etwa genauso aufwändig, wie die Überprüfung des Schnitts mit dem Spieler. Für alles andere kannst du mal im Web nach "Bounding Volume Hierarchy" suchen.
 
Das testen auf die Überschneidung von ein paar Rechtecken sollte auch auf schwächeren Systemen keine Probleme machen. Falls du soviele Objekte hast, das es doch Probleme macht, dann probiere eventuell mal spatial hashing aus.

Ein Test ob sich Bilder außerhalb des sichtbaren Bereichs befinden lohnt sich aber imho schon, wenn man das nicht nur zur Kollisionsabfrage verwendet, sondern auch vorm Zeichnen der Spielobjekte, etwas was nicht sichtbar ist, muss auch nicht gezeichnet werden. Zumindest bei meinem eigenen Projekt, das sich über Java's Graphics2D zeichnet, lohnt sich das gut messbar.
Hängt sicher auch von der Spielweltgröße ab.
 

Zurück
Oben