Previene le anomalie causate dal tempo di propagazione del segnale

3

Nella classe di ingegneria elettrica abbiamo appreso che le linee di segnale non sono ideali, quindi ci vuole del tempo perché il segnale raggiunga l'altra estremità del cavo, e se non teniamo conto di questo, può portare a fenomeni pazzi come :

Immagina di avere un gioco di carri armati, in cui tank1 (giocato dall'Europa) colpisce tank2 (controllato dagli USA). Nel monitor di tank1 vede che tank2 è distrutto, ma ci vuole un po 'di tempo (molto piccolo ma non trascurabile) affinché il segnale raggiunga il monitor di tank2. Quindi mentre il segnale viaggia, può sparare anche il suo cannone virtuale, distruggendo tank1. Il segnale di questo atto inizia il suo viaggio verso tank1, prima che arrivino i dati che dicono a tank2 che è morto. Questo provoca il fenomeno strano, che tank1 ha distrutto tank2, ma tank2 può ancora distruggere player1 (nonostante che tank2 non esista nemmeno).

Ci hanno detto che non possiamo risolvere questo problema in modo hardware, dobbiamo prevenirlo dal lato del software, ma non ci hanno detto come dovremmo farlo, ma sono cortese, quindi come possiamo / risolvono questo problema?

Il problema non è il tempo che trascorre mentre il proiettile vola in aria, ma il primo carro dovrebbe essere distrutto, quindi non dovrebbe essere in grado di sparare (o essere in grado di fare qualsiasi cosa), ma nel nostro problema è in grado, perché l'informazione che ha distrutto non è ancora arrivata. In questo caso dovremmo interpretare la parola sparata come: il proiettile ha avuto un impatto e ha distrutto il carro armato . Quindi il segnale effettivo che verrà inviato all'altro client è che è stato distrutto . Non l'evento in cui il carro armato nemico ha sparato il suo cannone.

    
posta totymedli 13.05.2013 - 19:21
fonte

2 risposte

3

In realtà, non puoi impedirlo e non dovresti. Doppi uccisioni possono accadere occasionalmente nella realtà.

Pensa a ciò simulando il tempo di volo dei proiettili.

Hai fatto un tentativo. COSÌ LUI. Non hai visto il suo muso lampeggiare, perché eri accecato dal bagliore e dal fumo del tuo stesso scatto. Vedi il tuo round colpirlo e distruggerlo. In quel momento, sei già morto, dal suo turno in arrivo, ma non hai ancora ricevuto il memo.

    
risposta data 13.05.2013 - 21:04
fonte
1

Non puoi programmare i rallentamenti. Sono un dato di fatto.

Ma puoi incorporare i ritardi nel gioco in vari modi:

  • Il più semplice è che il ritardo rappresenti il tempo di volo per i proiettili e che il giocatore registri i risultati. In questo caso, il giocatore spara, ma non vede il carro armato nemico distrutto fino a quando non viene ricevuto un messaggio che conferma la sua distruzione. Poiché ora c'è un (leggero) ritardo tra sparatorie e distruzione, non è più impossibile essere colpiti dal carro armato che hai appena sparato.
  • Un altro modo per tenere conto dei ritardi è usare passi temporali più ampi, in cui tutto ciò che accade tra t0 e t1 è considerato come avvenuto a t0 . Se il passo è abbastanza grande da coprire il ritardo, si considera che i due colpi siano stati sparati esattamente nello stesso momento.
  • Se c'è un server centrale, i ritardi potrebbero essere presi in considerazione anche dal lato dei controlli. Il giocatore non è all'interno del serbatoio, ma in una postazione di controllo centrale che gestisce a distanza un serbatoio.
risposta data 14.05.2013 - 10:40
fonte

Leggi altre domande sui tag