Hi,
- Ich möchte eine art "Radar" implementieren.
= Alle Objekte (die sich ständig bewegen) innerhalb eines Maximalradius anzeigen.
- Das Radar selbst bewegt sich auch ständig
Damit ich nicht konstant den Satz des Pythagoras an allen Objekten berechnen muss, dachte ich an die Kollisionserkennungsmethode. (Gerade eben durch einen anderen Post mit ähnlichem Thema wieder daran erinnert worden)
In einigen Artikeln im Internet liest man darüber, dass die Objekte selbst räumlich zugeteilt werden sollten. Erst wenn sich 2 Objekte im selben Raum befinden, sollte man weiter exakt berechnen, ob die Objekte kollidieren.
Bzw. in meinem Fall den Abstand zwischen zwei Punkten berechnen.
Das habe ich vor einiger Zeit auch mal versucht umzusetzen und aufgegeben.
- Mir kam nähmlich die Frage nach auf, wie man es denn eig. überhaupt Umsetzen sollt...
- Oder was passiert, wenn sich das Objekt in zwei Räumen gleichzeitig befindet?
Umgesetzt habe ich es so:
- Der Raum ist virtuell aufgeteilt in 4 "Räume", die wiederum sich in 4 "Räume" aufteilen etc... etc..., bis irgendwann eine Minimalgröße erreicht wurde. Der letzte "Raum" enthält eine ArrayList (Richtiger Container?) in der die Objekte gespeichert werden können.
- Jedesmal wenn sich ein Objekt bewegt, wird es aus der gegebenen ArrayList gelöscht und wieder geprüft in welchem Raum es sich jetzt befindet und dort hinzugefügt.
- Das bewegliche Radar bekommt einer der oberen Räume zugeteilt.
Dass heißt, jedesmal wenn sich das Radar bewegt, wird jeder Raum bzw. Unterraum solange durchgegangen, bis der minimalste Unterraum gefunden wurde, der alle Räume umfasst, die im Maximalradius liegen.
Das heißt natürlich, ragt der Maximalradius über die Kante des 2. größten Raumes um 1 Pixel nach draussen, wird dem Radar der größte Raum zugeordnet und damit werden alle Räume vom radar geprüft.
(Ein sehr blöder Umstand, aber darauf habe ich keine Antwort im Internet gefunden, was man macht wenn bei der Kollisionserkennung, ein Objekt über die Grenzen ragt)
Die Frage: Habe ich das so richtig gemacht? Dadurch dass ich im Internet keinen Bspcode gefunden habe, finde ich es schwer einzuschätzen.
Vielen Dank
Gruß
Net
PS: Den Originalcode habe ich mir erspart hereinzusetzen, da ich es nur zu gut kenne, dass man dann am Ende eh zu faul ist, den durchzugehen und unübersichtlich wird der Thread dann auch noch
- Ich möchte eine art "Radar" implementieren.
= Alle Objekte (die sich ständig bewegen) innerhalb eines Maximalradius anzeigen.
- Das Radar selbst bewegt sich auch ständig
Damit ich nicht konstant den Satz des Pythagoras an allen Objekten berechnen muss, dachte ich an die Kollisionserkennungsmethode. (Gerade eben durch einen anderen Post mit ähnlichem Thema wieder daran erinnert worden)
In einigen Artikeln im Internet liest man darüber, dass die Objekte selbst räumlich zugeteilt werden sollten. Erst wenn sich 2 Objekte im selben Raum befinden, sollte man weiter exakt berechnen, ob die Objekte kollidieren.
Bzw. in meinem Fall den Abstand zwischen zwei Punkten berechnen.
Das habe ich vor einiger Zeit auch mal versucht umzusetzen und aufgegeben.
- Mir kam nähmlich die Frage nach auf, wie man es denn eig. überhaupt Umsetzen sollt...
- Oder was passiert, wenn sich das Objekt in zwei Räumen gleichzeitig befindet?
Umgesetzt habe ich es so:
- Der Raum ist virtuell aufgeteilt in 4 "Räume", die wiederum sich in 4 "Räume" aufteilen etc... etc..., bis irgendwann eine Minimalgröße erreicht wurde. Der letzte "Raum" enthält eine ArrayList (Richtiger Container?) in der die Objekte gespeichert werden können.
- Jedesmal wenn sich ein Objekt bewegt, wird es aus der gegebenen ArrayList gelöscht und wieder geprüft in welchem Raum es sich jetzt befindet und dort hinzugefügt.
- Das bewegliche Radar bekommt einer der oberen Räume zugeteilt.
Dass heißt, jedesmal wenn sich das Radar bewegt, wird jeder Raum bzw. Unterraum solange durchgegangen, bis der minimalste Unterraum gefunden wurde, der alle Räume umfasst, die im Maximalradius liegen.
Das heißt natürlich, ragt der Maximalradius über die Kante des 2. größten Raumes um 1 Pixel nach draussen, wird dem Radar der größte Raum zugeordnet und damit werden alle Räume vom radar geprüft.
(Ein sehr blöder Umstand, aber darauf habe ich keine Antwort im Internet gefunden, was man macht wenn bei der Kollisionserkennung, ein Objekt über die Grenzen ragt)
Die Frage: Habe ich das so richtig gemacht? Dadurch dass ich im Internet keinen Bspcode gefunden habe, finde ich es schwer einzuschätzen.
Vielen Dank
Gruß
Net
PS: Den Originalcode habe ich mir erspart hereinzusetzen, da ich es nur zu gut kenne, dass man dann am Ende eh zu faul ist, den durchzugehen und unübersichtlich wird der Thread dann auch noch
Zuletzt bearbeitet: