Come si sincronizzano client e server quando si inviano le variazioni di velocità del lettore?


10

Sto implementando la previsione sul lato client. La maggior parte delle spiegazioni presuppone che il client invii messaggi come " Sposta il mio giocatore in alto di 1 posizione ". Cosa succede se invio messaggi come " Imposta la velocità del mio giocatore su x "?

grafica esplicativa;  mostrando i messaggi inviati e le posizioni calcolate sul client e sul server nel tempo

Sul client, il giocatore imposta la propria velocità (in base alla previsione sul lato client) prima che il server lo faccia, portando i due a non sincronizzarsi. Questo problema persiste anche considerando la latenza media.

Come posso affrontare questo?

Risposte:


8

È necessario inviare dati ridondanti, che qui significa inviare la posizione e la velocità. Anche se non sei sincronizzato, il fatto che tu abbia la posizione e la velocità ti consente di correggere la traiettoria usando una funzione di interpolazione.

Quindi l'utilizzo di alcuni trucchi come animazioni ritardate, accelerazioni, ecc. Consente di nascondere la latenza.

Modifica: presumo che il server sia autorevole.


Grazie per la tua risposta. Sì, il server è autorevole ma anche se invio dati ridondanti con la mia velocità, il client potrebbe correggere i suoi errori ma spesso leggo cose come "Se il client / server utilizza codice condiviso per le loro entità, gli errori di previsione non si verificheranno mai realmente" ma nel mio caso, si verificheranno SEMPRE leggermente, il che provocherebbe balbuzie dappertutto.
— Blu3,

1
@utente13842 il client sarà sempre fuori sincrono, dovresti correggere la posizione e la velocità lato client, come ha detto Thelvyn, in base al server che ti invia. in questo modo non si ottiene il movimento di balbuzie a meno che il client non sia completamente fuori sincrono, quindi sarà necessario agganciare i valori perché la correzione richiederebbe troppo tempo.
— dreta,

Questo è il motivo principale per utilizzare una funzione di interpolazione. Non puoi evitare la latenza, quindi devi correggere il movimento in modo regolare. Il client e il server simulano il mondo, ma il client deve ascoltare il server ed eseguire correzioni. Alcune tecniche utilizzate nelle reti del motore di origine: developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
— Thelvyn

viene brevemente menzionato anche in questo discorso su Google, dovrebbe far venire l'idea su youtube.com/watch?v=Prkyd5n0P7k#t=18m47s
— dreta

Ho trovato un'altra soluzione per questo particolare problema. Aggiungo il tempo in cui il client ha applicato i suoi input con ciascun pacchetto. Il significato n. 1 avrebbe tempo: 0 e la seconda volta: 100. Ora il server sa che il client ha premuto il suo pulsante alla volta: 100 e non prima.
— Blu3,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.