Sto creando un semplice gioco di corse (astronavi, senza gravità) usando p2.js, phaser e node.js.
Cosa ho fatto: il client riceve lo stato mondiale dal server:
- estrapolare altri giocatori in base all'ultima velocità / posizione dal server
- controlla se la previsione sul lato client era corretta - se nessuna posizione applicabile dal server ed elabora input di cui il server non era a conoscenza.
- passo di fisica fissa
Server:
- riceve input dai client e si applica
- passo di fisica fissa
- invia lo stato mondiale a ciascun client
Ora sto lottando con le collisioni tra i giocatori. Il giocatore in collisione sta saltando tutto il tempo durante la collisione. Penso che sia perché la previsione sul lato client non sta calcolando risultati simili al server.
Il server non conosce tutti gli input dal player (ritardo).
Il giocatore non ha la stessa posizione di giocatore in collisione del server (ritardo).
La combinazione di questi due rende il client in grado di risolvere la collisione in modo diverso rispetto al server e quando arriva lo stato del mondo il giocatore deve apportare una grande correzione.