XNA Tile Collision

DuffCola

Mitglied
Hi.
ich habe ein zweidimensionales int array, dass eine Tile Map bechreibt.
Code:
int[,] map1 = new int[,]
        {
            {3,3,3,3,3,3,3,3,3,3,3,3,3},
            {3,3,3,3,3,3,3,3,3,3,3,3,3},
            {3,3,3,3,3,3,3,3,3,3,3,3,3},
            {3,3,3,3,3,3,3,3,3,3,3,3,3},
        });
Die zahlen geben die Texturen an, die ich in einer Liste gespeichert habe.

Jetzt frage ich mich, wie man am performantesten eine Collision prüft.
Ich habe einmal versucht für jedes Tile ein Rectangle zu erstellen, aber das belastet, den pc bei 10.000 Tiles ja doch schon ein "bisschen".

Was ist die beste Methode um in einer 2d Tile Game die Collision zu prüfen und gibt es vielleicht bessere grundprizipen statt des 2 dimensionalen arrays?(Habe mal was von einem qaud tree, oder so gehört, weiß aber auch nach wikipedia nicht was das genau sein soll/wie man es auf ein Tile Game anwendet).
 
Zuletzt bearbeitet:

Cromon

Erfahrenes Mitglied
Hallo DuffCola

Was genau willst du denn testen? Auf welcher Tile ein Spieler ist? Oder wo willst etwas kollidieren? Und vor allem was? Einen Punkt? Einen Strahl? Ein Polygon? Wenn du so viele Teiles hast, dass es zu viel Aufwand ist das Objekt gegen die bouding rectangles jeder Tile zu testen solltest du dir eine entsprechende räumliche Hierarchie aufbaust. Hier bietet sich zum beispiel ein Quadtree an. So kannst du mit maximal 28 Tests ein Gebiet von 16384 Tiles abdecken (worst case), im besten Fall sind es 7 Tests. Mit 32 (worst case) bzw 8 (best case) kannst du 65535 Tiles verwalten.

Grüsse
Cromon
 

DuffCola

Mitglied
Ok Danke.
Aber auch na googeln weiß ich nicht was genau ein quad tree ist.
Kannst du mir ein Beispiel zeigen?
Es geht um die Kollisions erkennung von einer 2dTextrue.

Grüsse Michael
 

Cromon

Erfahrenes Mitglied
Hallo DuffCola

Ein Quadtree per se ist einfach ein Baum bei dem jeder Knoten entweder ein Blatt ist oder 4 Kinder hat. Das Bild bei Wikipedia verdeutlicht dies recht gut:
index.php


Was man da auch sehr gut sieht ist wie man damit einen Raum eben in kleine Unterstücke zerteilt. Jedes Kind ist ein Teil der Fläche seines Vaters.

Grüsse
Cromon
 

DuffCola

Mitglied
Wie kann ich das beim Programmieren anwenden?(Ich weiß einfach nicht wie man das nun handeln soll)

Grüsse
Michael
 
Zuletzt bearbeitet:

Neue Beiträge