MMO-Kollisionserkennung

7

Ich baue einen MMO-Spieleserver für ein 2D-Spiel und implementiere derzeit die Kollisionserkennung. Ich möchte wissen, was ich tun soll.

Nehmen wir an, ich habe 1000 Spieler und 10.000 Objekte. Sollte ich sie alle durchlaufen, um festzustellen, ob sie kollidieren? Das scheint ein bisschen teuer.

Ich könnte die Welt in Stücke teilen und jedes Objekt für jeden Spieler in seinem Stück iterieren.

Ich würde gerne andere Ideen wissen oder was Standard ist. Wie kann ein MMO-Server am besten mit der Kollisionserkennung umgehen static objects?

Patrick Lorio
quelle
Ich habe das gerade gefunden, es ergänzt Davids Antwort: gamedev.stackexchange.com/questions/3884/…
Patrick Lorio

Antworten:

14
  1. Die Welt, die in Stücke aufgeteilt wird, ist in der Tat der erste Schritt, den Sie unternehmen sollten, wobei jedes Stück getrennt behandelt wird.

  2. Statische Objekte ? Rein statisch in dem Sinne, dass sie sich nie bewegen und nie verschwinden? Dann können Sie diese Objekte einfach in die Datenstruktur integrieren, die Sie für die Navigation des Spielers in der Welt verwenden (z. B. ein Raster , ein Navigationsnetz oder ein Sichtbarkeitsdiagramm ). Keine individuelle Kollisionserkennung erforderlich. Dies kann manuell von den Designern oder automatisch von der Engine als Vorverarbeitungsschritt der Inhaltspipeline erfolgen.

  3. Wenn Sie andererseits tatsächlich eine Kollisionserkennung zwischen dynamischen Entitäten in jedem Block durchführen möchten, können Sie abhängig von der erwarteten Anzahl gleichzeitiger Entitäten von der Verwendung einer räumlichen Partitionierungsdatenstruktur (z. B. eines Quadtree oder eines Rasters ) zur Reduzierung profitieren Die Anzahl der Entitäten, die iteriert werden müssen. Erforschen Sie im Allgemeinen das umfassendere Thema der Breitphasenkollisionserkennung (kein Wortspiel beabsichtigt), das die oben genannten räumlichen Teilungstechniken sowie andere Ansätze wie Sweep und Prune umfasst .

David Gouveia
quelle
3
Randnotiz: Eine Teilmenge aller Physik-Engines ist nützlich, um Kollisionen zu erkennen. Auch wenn Sie keine Physik zum Bewegen verwenden, können Sie die Kollisionserkennung verwenden, wenn Sie keine eigenen schreiben möchten.
Patrick Hughes
1
@ PatrickHughes True. Vor ein paar Jahren habe ich stundenlang versucht, OBB-OBB-Schnittpunkte mithilfe des Trennachsensatzes korrekt zum Laufen zu bringen. Dann habe ich in 5 Minuten Box2D reingelegt und das Problem gelöst.
David Gouveia
Ganz zu schweigen davon, dass sie bereits Broadphase für Sie implementieren.
David Gouveia
1
Ist es praktisch, alle anderen Berechnungen in einer Physik-Engine auszuschalten, um dies zu erleichtern? Oft möchten Sie nicht versuchen, auf einem MMO-Server die richtige Physik durchzuführen, da sich Objekte regelmäßig diskontinuierlich bewegen.
Kylotan
1
Ich sagte nichts über Zucken oder "seltsam", aber MMO-Objekte müssen sich oft diskontinuierlich bewegen, weil Sie sie an bestimmten Positionen einrasten müssen, z. Zum Teleportieren / Zoning oder zum Korrigieren von schlechten Vorhersagen und Speed-Hacks usw. Ich habe seit Jahren keine Physikpakete mehr verwendet, aber damals war es normalerweise ziemlich schwierig, mit solchen willkürlichen Bewegungen umzugehen, daher meine Frage.
Kylotan