|
|
|
|
Strumenti |
23-02-2008, 14:14 | #301 |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4740
|
io la metterei in Environment (togliendo la chiamata a stopMusic() che ricade nella procedura di uscita dal game loop) , comunque chiamata alla fine da Game.start() (meglio forse sarebbe run()) per simmetria rispetto alla creazione dell' environment
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 23-02-2008 alle 14:20. |
23-02-2008, 14:42 | #302 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
Boh, devo fare un clean di CC.
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
23-02-2008, 18:55 | #303 | ||
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Quote:
Forse si potebbe fare che sia engine che quando viene chiamata la sua closeWindow() notifichi un evento di quit al loop che poi lo processerà. Bisogna vedere se sta in piedi. ps il mio test del loop ha qualche problema, il thread rimane attivo fino a quando la suit di test non viene completata. Non crea problemi, però è brutto sto testando un altra soluzione, vi faro sapere |
||
23-02-2008, 19:26 | #304 |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
ecco la nuova versione
Codice:
public void testLoop() { long timestamp = environment.getTimer().getTime(); ((MockTimer)environment.getTimer()).sleepOnAdvance(true); Runnable task = new Runnable() { public void run() { loop.loop(); } }; Thread thread = new Thread(task); thread.start(); try { Thread.sleep(100); } catch (InterruptedException e) { ; } loop.exitLoop(); try { thread.join(); } catch (InterruptedException e) { ; } assertTrue(timestamp + 2 < environment.getTimer().getTime()); long numberOfAdvanceTime = environment.getTimer().getTime() - timestamp; assertEquals("The number of advance in timer must be equal to number of updateState in loop", numberOfAdvanceTime, mockLoop.getNumStateUpdated()); } Ho provato anche a farlo fallire (facendo un loop infinito) e con il fork attivato in junit il test fallisce per timeout(impostabile da xml il default mi sembra di aver letto 18 sec). Con il fork disattivato invece il test rimane inloopato ma forse chiamando una join con timeout si può risolvere |
23-02-2008, 19:48 | #305 |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Codice:
public void testLoop() { long timestamp = environment.getTimer().getTime(); ((MockTimer)environment.getTimer()).sleepOnAdvance(true); Runnable task = new Runnable() { public void run() { loop.loop(); } }; Thread thread = new Thread(task); thread.start(); try { Thread.sleep(100); } catch (InterruptedException e) { ; } loop.exitLoop(); try { thread.join(20000); } catch (InterruptedException e) { ; } if (thread.isAlive()) { fail("The thread must no be alive"); thread.stop(); } assertTrue(timestamp + 2 < environment.getTimer().getTime()); long numberOfAdvanceTime = environment.getTimer().getTime() - timestamp; assertEquals("The number of advance in timer must be equal to number of updateState in loop", numberOfAdvanceTime, mockLoop.getNumStateUpdated()); } Si può evitare la chiamata, ma si lascia un thread girare a vuoto fino alla fine del test(può essere accettabile). L'unico problema potrebbe venire dal java memory model. Infatti 2 thread che accedono alla stessa variabile, non hanno la garanzia di vedere lo stesso stato della variabile, a meno che l'accesso non sia sincronizzato o la variabile sia volatile. Ora queste sono problematiche che raramente accadono in scenari mono processore(di solito capitano in scenari in cui ci sono cluster di cpu) per cui il problema e molto remoto. L'alternativa sarebbe modificare quit all'interno di abstarctLoop rendendola volatile, però si cambierebbe l'implementazione per venire incontro ai test :\ |
23-02-2008, 22:01 | #306 | |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
In ogni caso la cosa si sta mostrando "succhia" tempo e in qualche modo non KISS. Purtroppo ora non mi vengono in mente molte idee... |
|
23-02-2008, 22:06 | #307 | |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Attenzione, se la gravità cirtica era 20, era necessario scrivere 20 * 2. Se ora hai messo 20, il che vuol dire gravità effettiva 10, il test passa ancora ( in quanto sei ancora dentro illimite), ma il primo che va a modificare il codice può andare a infilare un bug senza accorgersene, in quanto non c'è il test sul caso limite. in ogni caso non modificare i test di nuovo, ma elimino semplicemente il / 2 nei conti.... tanti alla fine è una costante, basta andare a modifcare i valori nel config dividendoli per 2. Alla faccia del costumer |
|
23-02-2008, 23:09 | #308 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
L'operazione di rimozione del /2 mi sta facendo notare alcune cose:
1) Molti test controllano la stessa cosa, solo a livelli diversi. Ad esempio il controllo del corretto movimento di gem avviene a livello di Droppable, di Grid e di GRidController. Significa che l'integrazione è corretta, m anon ci complica un po' la vita?? 2) Molti test sono gravity-dependant, ovvero il numro di update era stato calibrato per ottenere il test corretto... Non avendo ancora cambiato il config, molti test falliscono senza ragionevoli motivi... tranne il fatto che ora il numero di update vanno dimezzati Ultima modifica di Bonfo : 23-02-2008 alle 23:19. |
24-02-2008, 01:47 | #309 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12077
|
Quote:
sto un pò fuso ora come ora.. ma anzichè usare un join non era meglio mettere nel thread un while(condition) con condition di tipo volatile boolean settabile a piacere a true o a false da un metodo synchronized?
__________________
|
|
24-02-2008, 01:50 | #310 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12077
|
Quote:
io ora ho sostituito tutti i Cell.SIZE * 2 con normalGravity .. ..e dove era prevista la stronger o la strongest gravity settavo il metodo corrispondente. Nei test con il controllo della posizioen al pixel avevo correttamente effettuato il controllo ponendo yStep pari a actualGravity / 2, ma nei test dove non era previsto il controllo al pixel non l'ho fatto..
__________________
|
|
24-02-2008, 21:54 | #311 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Il CELL_SIZE * 2 era proprio per settare il valore limite (che è assolutamente diverso dal valore di normal gravity) almeno quelli prova a revertarli!
Ora comunque capisco perchè sto test non fa più quello che dice Codice:
public void testBottomCollision() { grid.setNormalGravity(); grid.insertDroppable(gem1, 12, 4); float oldYPosition = gem1.getAnimatedSprite().getSprite().getPosition().getY(); grid.updateDroppable(gem1); grid.updateDroppable(gem1); Cell cell = Cell.create(13, 4); assertTrue(grid.isDroppableAt(cell)); float newYPosition = grid.getDroppableAt(cell).getAnimatedSprite().getSprite().getPosition().getY(); assertEquals(oldYPosition + grid.getActualGravity() , newYPosition, 0.0001f); } |
25-02-2008, 09:14 | #312 |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Puoi correggerlo o integrarlo con un altro test?
__________________
"We in the game industry are lucky enough to be able to create our visions" |
25-02-2008, 09:43 | #313 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
cmq sono riuscito a fare tutti i test ed a eliminare il warning sulla thread.stop con un annotation. Stasera committo |
|
25-02-2008, 16:00 | #314 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1536
|
Sono tornato ieri notte. In questi giorni estraggo la classe GameTurn =)
|
25-02-2008, 18:54 | #315 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
No, in realta' bisognerebbe revertare tutti i Cell.SIZE_IN_PIXELS * 2 e valutare caso per caso dove abbia senso mettere NormalGravity e dove lasciare Cell.SIZE_IN_PIXELS * 2, che poi, quando finiro' di rimuovere i /2, diventera' Cell.SIZE_IN_PIXELS.
Anche perche' potremmmo poi testare i casi dove la gravita' e' > Cell.SIZE_IN_PIXELS |
25-02-2008, 20:35 | #316 |
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
26-02-2008, 12:32 | #317 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
26-02-2008, 15:40 | #318 |
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
ciao a tutti, vorrei riprendere a partecipare attivamente al progetto, prima di andare ad agire su qualche refactor this, vorrei sapere se per caso c'è qualcuno che sta lavorando in modo particolare in un'area del codice, in modo da non rischiare di sovrapporci, anche considerando il fatto che so arruginito co diamonds quindi i miei refactoring saranno lentucci all'inizio, o se sono state prese alcune decisioni di design cui magari tendere nel lavoro di rendere il codice più leggibile
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
26-02-2008, 15:50 | #319 | |
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
Quote:
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
|
26-02-2008, 18:04 | #320 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
L'altra sera mi hanno portato a casa alle 23:30
Quindi non sono riuscito ad andare avanti con le modifiche che avevo iniziato a fare e a rintrodurre i Cell.SIZE_IN_PIXEL * 2. Confido in stasera P.S.: bentornati sia a Vifani sia a cisc |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:57.