Ich habe eine Point & Click-Schnittstelle auf einem Client, auf dem ein A * auf dem Server ausgeführt wird, um den Pfad zu finden.
Das Spiel wird wie ein RTS gesteuert, aber die Welt ist hartnäckig, so dass die Spieler jederzeit beitreten / gehen können und höchstens 30 Einheiten auf dem Bildschirm angezeigt werden.
Was ist der beste Weg, um die Spielerbewegungen zwischen Server und Client zu synchronisieren, nachdem ich die Pfade berechnet habe?
Muss der Server die Clients bei jedem Animationsschritt / Frame synchronisieren? oder kann es dem Client einfach sagen, dass er für jeden Knoten auf dem Pfad und jeden sich bewegenden Spieler zu Position X, Y gehen soll? Oder ist es am besten, die Animations-Timer sowohl auf dem Client als auch auf dem Server auszuführen und auf diese Weise implizit zu synchronisieren?
Wie würde der typische Datenaustausch für pfadbasierte Bewegungen aussehen?
BEARBEITEN:
Einige von euch haben Lockstep vorgeschlagen, weil ich "RTS" gesagt habe, aber das Spiel ist kein RTS, es hat nur die gleiche Art von Schnittstelle. Der große Unterschied ist, dass ich jederzeit in der Lage sein muss, Spieler dem Spiel beizutreten und es zu verlassen . Tut mir leid, dass ich nicht genauer bin.
quelle
Sobald der Pfad berechnet ist, verwendet der Server nur diesen Pfad, um das Zeichen zu steuern. Das Vorhandensein eines Pfads macht für dieses Problem keinen Unterschied - Sie senden immer noch dieselben Daten, unabhängig davon, ob es sich um regelmäßige Positionsaktualisierungen handelt oder was auch immer. Normalerweise ist es in Ordnung, reguläre Positionen (auf dem Client interpoliert, um sie zu glätten) und eine separate Nachricht zu senden, wenn das Gerät stoppt.
quelle
In meinem Spiel (ein Multiplayer-RPG-Spiel) sende ich Teile des Pfades an den Client (für NPC in der Nähe), dh. die 3 nächsten Positionen und die Zeit, zu der der NPC dort sein sollte. Für Spieler sende ich einfach die letzte gültige Position + ihren Zeitstempel, damit ich auf dem Client tot rechnen kann (oder etwas Aufwändigeres, wenn gewünscht).
Dies funktioniert völlig in Ordnung, vor allem, weil es keine Kollisionen zwischen Spielern / NPC gibt (mit einer geringen Verzögerung bemerken Sie nichts wirklich, mit einer Verzögerung von beispielsweise 250 ms bemerken Sie den Unterschied, wenn Sie die beiden Bildschirme (von zwei Spielern) sehen können ) zur gleichen Zeit, aber es ist immer noch nicht wirklich auf "einem Bildschirm" erkennbar).
Also würde ich sagen: Gehen Sie mit Server-Authoring (Validierung von Positionen + Zeitstempeln von Spielern und auch für die KI am Anfang, Sie können später ohne größere Probleme ein ausgefeilteres System für den NPC erstellen) + Client-Vorhersage.
ps. Ich verwende eine Millisekundengenauigkeit, die einwandfrei funktioniert, außer dass ein signiertes int nur etwa 3 Wochen hält, bevor ich den Server neu starten muss.
Möglicherweise möchten Sie auch die Zeitvorhersage überprüfen (dh versuchen, eine möglichst enge Synchronisierung mit dem Server herzustellen).
quelle