|
From: Duca <sen...@gm...> - 2002-05-25 13:49:59
|
25/05/02 1.49.22, Bernardo Innocenti <be...@de...> wrote: > E come risolviamo il problema della "concorrenza" tra giocatori >sfasati? Mi spiego con parole comprensibili: se in due sparano allo >stesso asteroide e lo colpiscono, ciascuno crede di essere stato il >primo perche' ci vuole del tempo prima che arrivi il messaggio >dell'altro. A questo punto lo stato del gioco deve essere >risincronizzato in qualche modo. Per esempio, ogni client potrebbe >aggiungere un "timestamp" ai propri messaggi (per esempio il numero >di millisecondi dall'inizio della partita). Quello con il timestamp >minore ha ragione e l'altro deve togliersi i punti e rimettere gli >asteroidi come ha detto il vincitore. > > Il problema e' che quando c'e' un lag notevole la cosa puo' avvenire >di frequente. Nel gioco si spara a ripetizione ed e' possibile che >un giocatore frammenti un asteroide due o tre volte prima di scoprire >che l'aveva gia' fatto un altro. Hai ragione, ma questo problema si presenta in qualsiasi configurazione sceglieremo, anche con un server centrale che dirama a tutti i giocatori l'informazione. Inoltre servirebbe all'interno dei client una logica aggi= untiva per tutelare i client con lag elevato. Faccio come hai fatto te l'esempio= di 2 (A e B) che sparano allo stesso asteroide, A colpisce l'asteroid ma ha un lag ele= vato, anche B colipisce l'asteroide ma ha un lag minore, il server distribuisce l'infor= mazione "B colpito=20 sprite xx" a tutti i giocatori, quindi arriva l'informazione A colpisce a= steroide e si scopre che A ha colpito prima di B. Ci sono 2 problemi A deve essere tutelato da= ll'informazione ERRATA del server e TUTTI i giocatori devono essere riportati ad una diversa con= figurazione degli sprite! > > Ritornare alla situazione originale dopo questo casino e' molto >difficile: l'oggetto Asteroid originale non c'e' piu', al suo posto >ci sono degli Asteroid piu' piccoli che devono essere tolti e >sostituiti con quelli dichiarati dall'altro giocatore. Ma i messaggi >possono arrivare sfalzati in vari modi... inoltre gli spari che hanno >colpito i nostri asteroidi sono gia' stati eliminati, invece >avrebbero dovuto colpire qualcos'altro. Credo che questa cosa vada cmq prevista se supponiamo di avere un lag var= iabile. cmq dovremmo raggruppare i player con lag simile, se ci=F2 non =E8 possib= ile credo sia opportuno memorizzare per ogni client un albero di informazioni relativi agli aster= oidi, chi li ha distrutti, quanti punti ha preso etc per eventualmente annullare un azion= e errata. |