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
?
collision-detection
mmo
server
Patrick Lorio
quelle
quelle
Antworten:
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.
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.
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 .
quelle