Sto creando il mio primo gioco online usando socket.io e mi piacerebbe che fosse un gioco multiplayer in tempo reale come agar.io o diep.io.
Ma mi sono imbattuto nel problema di cercare di capire come far funzionare tutti i computer alla stessa velocità.
Ho tre idee per i modelli, ma nessuno di loro sembra giusto, e mi chiedo come lo facciano i normali videogiochi. (Puoi saltare a leggere le mie idee; ti danno solo un modo per vedere i problemi che sto avendo.)
Il server consente ai client di funzionare autonomamente e passare gli aggiornamenti al server, che li trasmette poi al resto dei client. Ciò ha il problema che alcuni computer funzionano più velocemente di altri, consentendo loro di aggiornarsi più velocemente e di spostarsi più velocemente sullo schermo.
Chiedi al server di dire ai client quando eseguire l'aggiornamento. Posso quindi attendere fino a quando l'ultimo client risponde (una terribile idea nel caso in cui una persona abbia un computer lento), attendere fino a quando il primo client risponde (di nuovo, in attesa di comunicazione prima di ogni frame), o semplicemente inviarlo il più velocemente possibile (che sembra avere lo stesso problema del numero 1).
All'inizio del gioco, chiedi al server di comunicare ai client la velocità di aggiornamento. Ciò significherebbe che il cliente sarebbe responsabile di limitare i movimenti tra quel periodo di tempo. Ad esempio, se qualcuno riuscisse in qualche modo a premere due volte un pulsante in quel periodo di tempo, invierebbe un solo evento di pressione del pulsante. Ciò ha il problema che alcune azioni verrebbero ignorate (come la pressione del doppio pulsante) e che l'interazione si baserebbe sull'orologio del client, che potrebbe non corrispondere all'orologio del server. Il server dovrebbe quindi tenere traccia di ciascun client e assicurarsi che i relativi aggiornamenti vengano inviati all'ora corretta.
Ho fatto alcune ricerche , ma gli articoli che leggo non sembrano indirizzare specificamente cosa fare se un client invia aggiornamenti più velocemente degli altri client.
Nel mio caso particolare, ho a che fare con persone che hanno una maggiore velocità della tastiera (il loro computer invierebbe più aggiornamenti della tastiera rispetto ad altri computer).
In che modo i programmatori di solito si occupano di questo?