Ich erstelle ein einfaches Rennspiel (Raumschiffe, keine Schwerkraft) mit p2.js, phaser und node.js.
Was ich getan habe: Client erhält Weltstatus vom Server:
- Extrapolieren Sie andere Spieler basierend auf der neuesten Geschwindigkeit / Position vom Server
- Überprüfen Sie, ob die clientseitige Vorhersage korrekt war - wenn keine Position von Server- und Prozesseingaben angewendet wurde, die dem Server nicht bekannt waren.
- fester Physikschritt
Server:
- empfängt Eingaben von Kunden und bewerben sich
- fester Physikschritt
- Sendet den Weltstatus an jeden Client
Jetzt kämpfe ich mit Kollisionen zwischen Spielern. Der kollidierende Spieler springt während der Kollision ständig. Ich denke, das liegt daran, dass die clientseitige Vorhersage keine ähnlichen Ergebnisse wie der Server berechnet.
Der Server kennt nicht alle Eingaben vom Player (Verzögerung).
Der Spieler hat nicht die gleiche Position des kollidierenden Spielers wie der Server (Verzögerung).
Wenn diese beiden kombiniert werden, löst der Client eine andere Kollision als der Server. Wenn der Weltstatus eintrifft, muss der Spieler eine große Korrektur vornehmen.