Kollisionskontrolle

Hallo,
ich programmiere gerade ein „Spielchen“, bei dem etliche bewegte Teile (laufen in eigenen Threads) sowohl miteinander, alsauch mit der Wand oder Hindernissen Kollidieren können.
Grundsätzlich kein Problem, nur die Performance ist nicht gerade berauschend. Hat jemand eine Idee, wie man sowas schneller macht, als einfach in einer Schleife für jedes Teil zu schauen, ob es den anderen (oder Hindernissen) zu Nahe kommt?

Cu Rene

ich bin zwar kein Experte für Spiele-Programmierung, aber mit Grafik kenne ich mich ein bischen aus. Vielleicht gehts so:
Teile den Bildschirm in Bereiche (Planquadrate) ein. Führe pro Planquadrat eine Liste. Wenn ein Objekt in einem Planquadrat ist, dann trage es in die entsprechende Liste ein. Vergleiche nur Objekte im selben Planquadrat miteinander. Das lohnt sich auf jeden Fall ab einer gewissen Anzahl von Objekten. Das erfordert allerdings etwas „Schmalz“.

Grüße
Moriarty

Danke,

ich bin zwar kein Experte für Spiele-Programmierung, aber mit
Grafik kenne ich mich ein bischen aus. Vielleicht gehts so:
Teile den Bildschirm in Bereiche (Planquadrate) ein. Führe pro
Planquadrat eine Liste. Wenn ein Objekt in einem Planquadrat
ist, dann trage es in die entsprechende Liste ein. Vergleiche
nur Objekte im selben Planquadrat miteinander. Das lohnt sich
auf jeden Fall ab einer gewissen Anzahl von Objekten. Das
erfordert allerdings etwas „Schmalz“.

Die Idee ist durchaus brauchbar, allerdings scheint mir der Rand der Quadrate ein Problem zu machen.

Cu Rene

Hi.
Wie waere es, wenn du die Planquadrate ueberlappen laesst (nur ein paar Pixel). Das ist zwar etwas mehr Aufwand beim Verwalten, aber dafuer hast du keine Probleme im Randbereich.
CU,
Sebastian.

Danke,

Wie waere es, wenn du die Planquadrate ueberlappen laesst (nur
ein paar Pixel). Das ist zwar etwas mehr Aufwand beim
Verwalten, aber dafuer hast du keine Probleme im Randbereich.

ich hab auch schon drangedacht, die benachbarten Quadrate mit abzusuchen. Mal sehen, was sich mit vernünftigem Aufwand realisieren lässt.

Cu Rene