Ich entwickle eine kleine 2D-Game-Engine. Die Zeichen haben eine Malmethode, die derzeit Folgendes ausführt:
- Berechnen Sie die neue Position des Charakters anhand seiner Geschwindigkeit usw.
- Aktualisieren der Kollisionsgitterzelle **
- Zeichne den Charakter an der neuen Position
** Ich habe ein Kollisionsraster erstellt, um die Anzahl der Kreuzungsprüfungen zu verringern
Nun ist der grundlegende Algorithmus, den ich zur Erkennung von Kollisionen gedacht habe:
For Each Character
Check intersection with characters in surrounding 8 cells
Ich kann diesen Code einfach in die Paint-Methode einfügen. Aber hier ist das Problem, das ich erwarte.
Angenommen, zwei Zeichen A und B liegen in benachbarten Zellen des Kollisionsgitters. Nun wird gemäß dem obigen Algorithmus bei der Iteration von Zeichen A festgestellt, dass es mit B kollidiert ist. Bei der Iteration von Zeichen B wird festgestellt, dass es mit A kollidiert ist.
Aber ich habe die Idee, dass wenn A feststellt, dass es mit B kollidiert ist, es B mitteilen sollte, dass es mit A kollidiert ist. Dies würde viele Vergleiche ersparen, wenn mehr als 2 Akteure kollidieren. Aber ich bin mir nicht sicher, wie ich damit umgehen soll. Ich denke, anstatt dass jeder Charakter nach seiner Kollision sucht, sollte ich innerhalb der Spielschleife nach der Kollision suchen.
Wäre dieser Ansatz richtig? Wie haben Sie mit solchen Problemen umgegangen? Ich habe selbst an das Kollisionsgitter gedacht. Gibt es Alternativen zur Kollisionsgitterlogik?