Domanda

Sto pensando di fare un in rete gioco.Io sono un po ' nuovo a questo, e hanno già incontrato un sacco di problemi cercando di mettere insieme un buon piano per dead reckoning e la latenza di rete, quindi mi piacerebbe vedere qualche buona letteratura sull'argomento.Cercherò di descrivere i metodi che ho considerato.

Inizialmente, ho appena inviato il giocatore in ingresso al server, la simulazione di lì, e trasmettere le modifiche in stato di gioco per tutti i giocatori.Questo ha reso difficile barare, ma sotto ad alta latenza, le cose erano un po ' difficili da controllare, dato che non si vede i risultati delle proprie azioni immediatamente.

Questo articolo di GamaSutra è una soluzione che consente di risparmiare larghezza di banda e rende il locale di ingresso liscia simulando sul client, ma sembra gettare cheat-correzione di fuori della finestra.Inoltre, io non sono sicuro di cosa fare quando i giocatori iniziano a manipolare l'ambiente, spingendo rocce e simili.Questi precedentemente neutro oggetti temporaneamente diventare oggetti che il cliente deve inviare Pdu, o forse più giocatori in una sola volta.Cui Pdu avrebbe vinto?Quando gli oggetti smettere di essere doppiamente tracciati da ogni giocatore (da confrontare con i morti sottovalutare versione)?Il cielo non voglia due giocatori di impegnarsi in un sumo match (ad es.iniziare a spingersi l'un l'altro).

Questo gamedev.net bit mostra la gamasutra soluzione insufficiente, ma descrive un metodo diverso che non ha davvero risolvere il mio collaborativo boulder-spingendo esempio.La maggior parte delle altre cose che ho trovato sono specifici per i tiratori.Mi piacerebbe vedere qualcosa di più orientata verso i giochi che gioco come Zelda SNES, ma con un po ' più di fisica / momentum coinvolti.

  • Nota:Non sto chiedendo circa simulazione fisica qui -- altre biblioteche che hanno coperto.Solo strategie per rendere i giochi liscia e reattiva nonostante la latenza di rete.
È stato utile?

Soluzione

Scopri come Valvola fa il Source Engine: http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

Se è per uno sparatutto in prima persona sarà probabilmente necessario approfondire alcuni degli argomenti che citare ad esempio:la previsione, la compensazione e l'interpolazione.

Altri suggerimenti

Trovo questa rete fisica post del blog da Glenn Fiedler, e ancor di più la risposta/discussione di sotto di essa, impressionante.È abbastanza lunga, ma vale la pena-mentre.

In sintesi

Server non è in grado di tenere il passo con la reiterazione di simulazione ogni volta che il client di ingresso viene ricevuto in un moderno gioco di simulazione fisica (es.veicoli o dinamica di un corpo rigido).Pertanto il server ordini tutti i clienti di latenza+jitter (tempo) davanti a server in modo che tutti i pacchetti entranti vengono in JIT prima che il server ha bisogno di 'em.

Egli dà anche uno schema di come gestire il tipo di proprietà che si chiede.Le diapositive che ha mostrato sulla GDC sono impressionanti!

Su barare

Signor Fiedler se stesso (e gli altri) lo stato che questo algoritmo soffre per non essere molto trucco a prova di.Questo non è vero.Questo algoritmo non è meno facile o difficile da sfruttare rispetto ad un tradizionale client/server di stima (vedi articolo sui client/server tradizionale di previsione in @CD di Sanchez risposta).

Per essere assolutamente chiaro:il server non è più facile barare semplicemente perché riceve rete fisica di posizionamento in tempo (anziché x millisecondi di ritardo, come nel tradizionale di stima).I clienti non sono interessati a tutti, dato che tutti ricevano l'informazione posizionale dei loro avversari con la stessa latenza come nei tradizionali di stima.

Non importa quale algoritmo si sceglie, si potrebbe voler aggiungere un cheat-protezione se sei il rilascio di un titolo importante.Se si, mi suggeriscono di aggiungere la crittografia contro fantoccio bot (per esempio un XOR stream cipher dove il "keystream è generato da un generatore di numeri pseudo casuali") e semplici controlli di integrità contro le cricche.Alcuni sviluppatori di implementare algoritmi per controllare che i file binari sono intatte (per ridurre il rischio di rottura) o per garantire che l'utente non è l'esecuzione di un debugger (per ridurre il rischio di un crack in fase di sviluppo), ma quelli sono più discutibile.

Se si sta solo facendo un piccolo gioco indie, che può essere giocato solo da alcune migliaia di giocatori, non si preoccupano di mettere in atto qualsiasi anti-cheat algoritmi fino a che 1) hai bisogno di loro;o 2) la base di utenti cresce.

abbiamo implementato il multiplayer serpente gioco basato su un server obbligatorio e remoto giocatori che fanno previsioni.Ogni 150ms (nella maggior parte dei casi) il server invia un messaggio contenente tutti i movimenti consolidati inviato da remoto ogni giocatore.Se il client remoto movimenti di arrivare in ritardo al server, si scarta.Il cliente sarà il replay dell'ultimo movimento.

Check out Networking istruzione argomenti all'XNA Creatore del sito web del Club.Approfondisce argomenti come l'architettura di rete (peer to peer o client/server), Rete di Stima, e poche altre cose (nel contesto di XNA, naturalmente).Questo può aiutare a trovare le risposte che stai cercando.

http://creators.xna.com/education/catalog/?contenttype=0&devarea=19&sort=1

Si potrebbe cercare di imporre la latenza a tutti i vostri clienti, a seconda della latenza media della zona.Che modo il cliente può provare a risolvere i problemi di latenza e si avrà la sensazione di simile per la maggior parte dei giocatori.

Io, naturalmente, non suggerendo che si forza un 500ms ritardo su tutti, ma le persone con 50ms può essere bene con 150 (extra 100ms aggiunto), in modo che il gameplay di apparire più liscia.

In un guscio di noce;se hai 3 giocatori:

  • Giovanni:30ms
  • Paolo:150ms
  • Amy:80 ms

Dopo i calcoli, invece di inviare i dati al client, tutti allo stesso tempo, conto per la loro latenza e iniziare a inviare a Paolo e Amy prima di Giovanni, per esempio.

Ma questo approccio non è praticabile in estrema latenza situazioni in cui le connessioni remote o wireless, gli utenti possono davvero rovinare tutto per tutti.Ma è un'idea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top