|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
[CICLO 15] Storia 2
Storia 2: Bugfix e refactoring. Introduzione di un sistema di playback dei log.
Punti cardine da tenere a mente durante i lavori: * Mai fare a gara a chi finisce il task per primo, meglio procedere con calma, altrimenti perderemo molto più tempo in seguito * Evitiamo di complicarci la vita, esiste di certo una soluzione più semplice di quella che abbiamo pensato di implementare * MAI aggiungere elementi non richiesti esplicitamente dai task: se mai serviranno, se ne parlerà nelle prossime storie * Comunichiamo il più possibile, se qualcosa non è chiaro discutiamone tutti i dettagli fino ad eliminare ogni dubbio, anche il più insignificante * Postare sempre la test list PRIMA di mettere mano al codice Refactoring: - Environment (cdimauro) - Grid e trasformazione di BigGem in Droppable - Omogenizazzione degli update degli State - Action: definire meglio le responsabilità rispetto a Grid - SoundBank - TextureBank -va finito il refactoring di Droppable ed AbstractDroppable creando le ultime interfacce ed eliminando alcune duplicazioni. -sono presenti metodi non testati... -Tutti i TODO del codice dovrebbero sparire in fretta perchè poi si finisce a portarseli dietro a lungo (addirittura c'è un test commentato con scritta una cosa tipo "qualcuno lo faccia passare" )
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. Ultima modifica di Jocchan : 08-05-2006 alle 12:32. |
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Io proporrei un bel refactoring e conseguente controllo delle Action.
Secondo me, molti metodi di Grid dovrebbero migrare in queste classi: si semplificherebbe grid e le Action diventerebbero molto più chiare, leggibili e probabilmente più semplici. Primo esempio: in UpdateFallsAction sembra che grid.updateAlsoDroppedGem() venga richiamata 2 volte sulle gemme di una BigGem Insomma...grid deve proprio dimagrire
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Procedi pure al refactoring.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Io l'ho proposto
![]() ..ma mica ho il tempo per farlo Ieri ho dato un occhiata....è un matassa mica facile da sbrogliare |
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Visto che le parti di codice da toccare in questa storia sono completamente diverse da quelle della prima storia potete cominciare anche subito a fare refactoring e a modificare.
Non avendo una idea precisa di quello che c'è da fare ho preferito non scrivere task però fate come bonfo. Prima di partire a fare qualcosa provate a scrivere due righe e a proporle sul forum. ciao |
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
mi offro per il playbak del log
direi 5 giorni(sempre che nn lo dividiate in vari task ) |
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per il playback del log bisogna sincronizzare strettamente i vari timer del gioco...
Nel senso che bisogna fare 1 reactToInput ogni K update...inoltre anche tutti gli altri timeStamp ottenuti nel gioco devono essere sincronizzati con quelli del timer di update... Questo comporta un refactoring di timer che secondo me potrebbe essere di questo tipo: timer.setTimeStamp(); <---da richiamare una sola volta per ogni ciclo di update timer.getTimeStamp(); <---che dovrà essere richiamata da TUTTI i metodi che ora hanno bisogno di un timestamp In questo modo la sinconizzazione dovrebbe essere perfetta... |
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
precaricare il file di log, con gli eventi key da generare lavorare a livello di input o inputReactor(devo vedere bene) per assegnare gli eventi al tick giusto il resto dovrebbe funzionare come ora. Forse non importa neanche disabilitare i tasti del secondPlayer. Le uniche perplessita possono essere sul precaricamento del log, potrei leggerlo mano a mano e poi usarlo, per evitare problemi di log molto lunghi, ma preferirei il caricamento manuale. Cmq si puo fare una classe che getta l'evento da assegnare, e poi si cambia l'implementazione. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
altra cosa da valutare è l'inserimento della pair, ma mi sembra che nel log venga scritto il seed, percui bisogna settare nel caso della demo il seed a mano.
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Praticamente un generatore di evanti basato su file |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Problema che richiede consiglio.
Vi faccio notare una piccola differenza: Codice:
bigGem.canMoveDown(grid) grid.gemCanMoveDown(gem) Ed ora guardando bene è uscito pure questo: Codice:
public void draw(EngineInterface engine)
{
background.draw(engine);
forEachGem(new DrawGemsAction(this, engine));
for(BigGem bigGem : bigGems)
{
bigGem.draw(engine);
}
}
Codice:
gem.getSprite().draw(engine); Anche questo è da fare |
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Bonfo, BigGem può sicuramente essere resa più omogenea... Io proprio finirei di gestirla dome aggregato di Gem ma bisogna prima terminare il refactoring di Droppable che avevamo iniziato e che mi pare sia in sospeso :P
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
E che manca...??? Io stavo guardando ora se è lecito far si che i Droppable implemntino anche Drawable...infatti mentre BigGem gestisce internamente la Sprite, le gemme non fanno nulla, facciamo tutto noi a mano. Questa differenza non mi piace molto.
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Il playback non deve essere legato strettamente al timer del gioco e agli update dell'engine.
Quello che mi interessa (e lo spirito del task) e' arrivare a poter scrivere un test di questo tipo: Codice:
LogPlayback playback = new LogPlayback("log.txt");
int gameTurn = 100;
playback.Run(gameTurn);
Grid playerOne = playback.getPlayerOneGrid();
Grid playerTwo = playback.getPlayerOneGrid();
Ovviamente l'esecuzione del singolo test non deve impiegare dei minuti, e per questo non voglio che il playback sia legato ad un timer "reale", ma solo al concetto di game turn. Se il concetto non esiste, va aggiunto.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Altra cosa che non mi piace. Ovvero che è meglio rendere molto più chiara:
in grid c'è: move(float,float); moveTo(float,float); Se mi dite che la differenza è chiara sto zitto...altrimenti
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Grid è pieno di metodi che riguardano solo le BigGem e questo mi puzza.
Ci sono funzioni come "public boolean gemCanMoveDown(Droppable gem)" che hanno nel nome Gem e poi richiedono un Droppable. Anche questa confusione non mi piace |
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
in teoria è facile ricavarselo dal log(cè il timeStamp per ogni azione e sapendo il rate degli update si ricava in fretta), ma in effetti sarebbe piu carino introdurlo(anche nella scrittura dei log), in modo da avere una cosa piu uniforme. E cmq perdere il timeStamp dal log in favore del gameTurn non penso sia un problema |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:24.



















