Nabend Community,
ich bin gerade dabei eine 2D Jump 'n Run Engine zu schreiben und wollte mal die Kollisionsabfragen verbessern. Anstatt jedes mall über all Objekte zu loopen, dachte ich mir eine ArrayList zu benutzen.
Die ArrayList beinhaltet n CollisionGrid Klassen. Jede CollisionGrid Klasse bedeckt ein Areal im Spiel und speichert die im Spiel befinden Objekte in dem angegeben Grid. Zum Beispiel (0,0|128,128) (bei einer Tile größe von 128 passen hier 4x(4 + n) bewegbare rein).
So müsste ich nur einmal über diese Liste loopen und testen in welchen Grid's ich mich befinde. So wäre ich bei maximal 4x(16+n) Kollisionsabfragen.
Am Ende jedes Update durchlaufs eines bewegbaren Objektes, sofern er sich bewegt hat, müsste ich natürlich nochmal drüber loopen und die eigene Position aus den Klassen der CollisionsGrid's löschen/hinzufügen.
Meine eigentliche Frage ist nun. Hat jemand hierfür Verbesserungsvorschläge? Macht es vielleicht sogar sind die 4x4 Grids nochmal in 2x2 zu unterteilen? Oder gar das ganze größer zu machen?
Danke schonmal für alle Antworten.
Bananabert
ich bin gerade dabei eine 2D Jump 'n Run Engine zu schreiben und wollte mal die Kollisionsabfragen verbessern. Anstatt jedes mall über all Objekte zu loopen, dachte ich mir eine ArrayList zu benutzen.
Die ArrayList beinhaltet n CollisionGrid Klassen. Jede CollisionGrid Klasse bedeckt ein Areal im Spiel und speichert die im Spiel befinden Objekte in dem angegeben Grid. Zum Beispiel (0,0|128,128) (bei einer Tile größe von 128 passen hier 4x(4 + n) bewegbare rein).
So müsste ich nur einmal über diese Liste loopen und testen in welchen Grid's ich mich befinde. So wäre ich bei maximal 4x(16+n) Kollisionsabfragen.
Am Ende jedes Update durchlaufs eines bewegbaren Objektes, sofern er sich bewegt hat, müsste ich natürlich nochmal drüber loopen und die eigene Position aus den Klassen der CollisionsGrid's löschen/hinzufügen.
Meine eigentliche Frage ist nun. Hat jemand hierfür Verbesserungsvorschläge? Macht es vielleicht sogar sind die 4x4 Grids nochmal in 2x2 zu unterteilen? Oder gar das ganze größer zu machen?
Danke schonmal für alle Antworten.
Bananabert