# Collision Detection in einem 2D Sandbox Game.



## GentleXD (1. Apr 2017)

Schönen guten Abend, 

ich sitzte mal wieder an einem Spiel. An einem 2D Sandbox Game. Nun programmiere ich gerade den Spieler, und ich programmiere seine Collision Detection mit der Welt. Alle Blöcke der Welt sind in einem zweidimensionalen Array gespeichert. Also alle haben eine x und eine Y Koordinate und wenn sie gerendert werden werden einfach diese X und Y Positionen mit 16 multipliziert. Also ist der Block an Array Position 0,0 in der World an der Position 0,0 und der Block im Array mit 1,1 ist dann in der World an den X und Y Koordinaten 16, 16 usw.
Nun habe ich diese für die Collision Detection immer in "Chunks" aufgeteilt und dann bin ich alle Blöcke dieses Chunks durchgegangen indem der Spieler gerade steht und have auf Collisions Abfragen geprüft ich wollte mal fragen ob es nicht einen einfachere Metjode gibt in der man dierekt mit Side Up und Down Offsets arbeitet und dann direkt die Blöck um den Spieler herum bekommt (Der Spieler ist 4 Blöcke hoch circa und 3.5 Blöcke breit) ?

Danke schonmal im Vorraus,

GentleXD


----------



## Tobse (2. Apr 2017)

Wenn du aus der Spielerposition die in Frage kommenden Blöcke direkt ableiten willst, ohne über alle registrierten zu iterieren, musst du eine Baumstruktur benutzen. Aber da dein 2-Dimensionales Array so direkt mit den Positionen der Elemente in der Spielwelt zusammenhängt, ist das eigentlich der Beste Weg. Die Baumstruktur ist höchstwahrscheinlich langsamer als dein Array.

Wenn du einfach nur die Blöcke möchtest kannst du ja die Elemente aus dem Array nehmen, die sich auf den Bereich um den Spieler beziehen. Sollte ja mit einer Index-Berechnung so machbar sein, oder nicht?


----------



## JuKu (9. Apr 2017)

Alternativ könntest du einen Quadtree nutzen:
https://gamedevelopment.tutsplus.co...ct-likely-collisions-in-2d-space--gamedev-374

So geht man übrigens auch bei 3D Spielen vor, nur dass man bei 3D Spielen einen Octotree verwendet und bei 2D einen Quadtree.


----------

