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 fanno i normali videogiochi. (Puoi saltare la lettura delle mie idee, ti danno solo un modo per vedere i problemi che sto avendo.)
-
Il server consente ai client di eseguire autonomamente e passare gli aggiornamenti al server, che quindi li trasmette al resto dei client. Questo ha il problema che alcuni computer sono più veloci di altri, consentendo loro di aggiornarsi più velocemente e di spostarsi più rapidamente sullo schermo.
-
Chiedi al server di avvisare quando aggiornare. Posso quindi aspettare 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 inviarli il più velocemente possibile (che sembra avere lo stesso problema del numero 1).
-
All'inizio del gioco, chiedi al server di aggiornare quanto velocemente. Ciò significherebbe che il cliente sarebbe responsabile della limitazione dei movimenti tra quel periodo di tempo. Ad esempio, se qualcuno in qualche modo è riuscito a premere un pulsante due volte entro tale periodo di tempo, invierà solo un evento di stampa con un pulsante. Questo ha il problema che alcune azioni sarebbero ignorate (come la doppia pressione di un 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 ogni cliente e assicurarsi che i suoi aggiornamenti vengano inviati al momento giusto.
Ho fatto qualche ricerca , ma gli articoli che ho letto non sembrano indicare specificamente cosa fare se un client invia aggiornamenti più velocemente di altri client.
Nel mio caso particolare, ho a che fare con persone che hanno una maggiore velocità della tastiera (il loro computer invierà più aggiornamenti della tastiera rispetto ad altri computer).
In che modo i programmatori di solito si occupano di questo?