|
|
|
|
Strumenti |
05-02-2008, 01:15 | #41 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Quote:
Comunque non so quanto riduce la complessità . In pratica invece di fare il ciclo su due livelli lo fai su uno solo, però hai il vantaggio di togliere dall'iterazione di tutti gli elementi "null" della griglia ...
__________________
GPU Compiler Engineer |
|
05-02-2008, 01:46 | #42 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
E in piu' non ti devi tenere una lista di supporto per sapere se quell'oggetto l'hai gia' visitato o no.
Mi ricordo che subito dopo la FirstPlayable abbiamo trasformato grid da array di celle a lista di droppable proprio per poter itereare solo sugli oggetti dentro la grid. Il problema che avevo incontrato era l'iterazione mutlipla perche' usavo il foreach (":") , ma con l'iterator il problema si risolve ( o almeno cosi' dovrebbe essere) Ultima modifica di Bonfo : 05-02-2008 alle 01:54. |
05-02-2008, 02:20 | #43 |
Member
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
|
Era esattamente quello che stavo per proporre io, infatti per il refactoring di prima ho risolto così (alle Actions viene già passata la droppableList).
Tuttavia provando a modificarlo in AbstractGridIteration ottengo un bel java.util.ConcurrentModificationException in un test fra l'altro che c'entra poco, ma che richiama la createNewBigGemsAction... Sto provando a modificare ma sono un attimo in difficoltà. Intanto committo il refactoring del REFACTOR THIS. EDIT: cosa intendi per iterazione multipla? Ultima modifica di Baol : 05-02-2008 alle 02:25. |
05-02-2008, 05:35 | #44 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
java.util.ConcurrentModificationException
Ovvero stai cercando di modifcare un lista sulla quale qualcun'altro sta iterando. Quello che fa scoppiare tutto è (ad esempio) Codice:
for(Object obj : objects) { for(Object obj1 : objects) { objects.remove(obj1); } Non è sufficente farsi dare due iteratori diverisi, il problema si pone lo stesso, ovvero e un po' più complicato da risolvere Ultima modifica di Bonfo : 05-02-2008 alle 07:16. |
05-02-2008, 07:26 | #45 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Prima
Codice:
public void testPositions() { // TODO: REFACTOR THIS // Test positions of what? clarify this test and simplify it int row1 = 4; int column1 = 2; Point spritePosition1 = gem.getAnimatedSprite().getPosition(); grid.insertDroppable(gem, row1, column1); assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column1, spritePosition1.getX()); assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row1, spritePosition1.getY()); int row2 = 3; int column2 = 5; Droppable anotherGem = createGem(DroppableColor.DIAMOND); Point spritePosition2 = anotherGem.getAnimatedSprite().getPosition(); grid.insertDroppable(anotherGem, row2, column2); assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column2, spritePosition2.getX()); assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row2, spritePosition2.getY()); } Codice:
public void testGemSpritePositions() { grid.insertDroppable(gem, 4, 2); checkSpritePosition(gem.getAnimatedSprite().getPosition(), 4, 2); Droppable anotherGem = createGem(DroppableColor.DIAMOND); grid.insertDroppable(anotherGem, 3, 5); checkSpritePosition(anotherGem.getAnimatedSprite().getPosition(), 3, 5); } private void checkSpritePosition(Point spritePosition, int row, int column) { assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column, spritePosition.getX()); assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row, spritePosition.getY()); } |
05-02-2008, 07:46 | #46 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Prima
Codice:
public void testGemIsDrawnCorrectly() { // TODO: REFACTOR THIS MockEngine engine = MockEngine.create(800, 600); Droppable gem = createGem(DroppableColor.DIAMOND); final Sprite sprite = gem.getAnimatedSprite().getSprite(); sprite.draw(engine); assertEquals("gem must be drawn with unbrightened texture(bad left)", engine.getImageRect().getLeft(), 0); assertEquals("gem must be drawn with unbrightened texture(bad right)", engine.getImageRect().getRight(), 31); } public void testGemViewSize() { // TODO: REFACTOR THIS MockEngine engine = MockEngine.create(800, 600); Droppable gem = createGem(DroppableColor.DIAMOND); gem.getAnimatedSprite().getSprite().draw(engine); assertEquals( "Height of the texture engine differente of height of gem(init)", engine.getImageRect().getHeight(), (int)gem.getAnimatedSprite().getSprite().getTextureArea().getHeight()); assertEquals( "Width of the texture engine differente of width of gem(init)", engine.getImageRect().getWidth(), (int)gem.getAnimatedSprite().getSprite().getTextureArea().getWidth()); gem.getAnimatedSprite().getSprite().draw(engine); assertEquals( "Height of the texture engine differente of height of gem(bright false)", engine.getImageRect().getHeight(), (int)gem.getAnimatedSprite().getSprite().getTextureArea().getHeight()); assertEquals( "Width of the texture engine differente of width of gem(bright false)", engine.getImageRect().getWidth(), (int)gem.getAnimatedSprite().getSprite().getTextureArea().getWidth()); } Codice:
private Gem gem; private MockEngine engine; @Override public void setUp() { super.setUp(); engine = (MockEngine)environment.getEngine(); gem = createGem(DroppableColor.DIAMOND); } public void testGemIsDrawnCorrectly() { gem.getAnimatedSprite().getSprite().draw(engine); assertEquals("Wrong left texture position", engine.getImageRect().getLeft(), 0); assertEquals("Wrong right texture position", engine.getImageRect().getRight(), 31); } public void testGemViewSize() { Sprite sprite = gem.getAnimatedSprite().getSprite(); sprite.draw(engine); assertEquals("Wrong textureArea height", engine.getImageRect().getHeight(), sprite.getTextureArea().getHeight()); assertEquals("Wrong textureArea Width", engine.getImageRect().getWidth(), sprite.getTextureArea().getWidth()); } |
05-02-2008, 07:48 | #47 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Questo è più difficile....
Prima Codice:
//TODO: REFACTOR THIS public void testUpdateWithThreeFrames() { AnimatedSprite animatedSprite = createAnimatedSprite(3, 100); timer.advance(ANIMATION_DELAY); animatedSprite.updateAnimation(timer.getTime()); timer.advance(1); animatedSprite.updateAnimation(timer.getTime()); assertEquals("current frame must be 1", 1, animatedSprite.getCurrentFrame()); timer.advance(99); animatedSprite.updateAnimation(timer.getTime()); assertEquals("current frame must be 2", 2, animatedSprite.getCurrentFrame()); } Codice:
public void testUpdateWithThreeFrames() { AnimatedSprite animatedSprite = createAnimatedSprite(3, 100); timer.advance(ANIMATION_DELAY + 1); animatedSprite.updateAnimation(timer.getTime()); assertEquals("current frame must be 1", 1, animatedSprite.getCurrentFrame()); timer.advance(99); animatedSprite.updateAnimation(timer.getTime()); assertEquals("current frame must be 2", 2, animatedSprite.getCurrentFrame()); } ... questo però non lo committo |
05-02-2008, 09:24 | #48 | |
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" |
|
05-02-2008, 09:27 | #49 | |
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" |
|
05-02-2008, 09:58 | #50 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1536
|
Bonfo per l'eccezione su Cell usa un factory method magari che ritorna null se la cell non e` valida...
Per quant origuarda la lista di droppable: per me dovrebbe essere privata ed inerente all'implementazione interna di Grid. Per questo volevo creare un command per iterare le celle.. |
05-02-2008, 10:02 | #51 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
i due "refactor this" che stanno in CrushByFlashAction sono una goduria
me ne occupo io PS: dite addio a CrushByFlashAction perché temo che stia per scomparire |
05-02-2008, 10:20 | #52 | |
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" |
|
05-02-2008, 10:42 | #53 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1536
|
Quote:
|
|
05-02-2008, 10:42 | #54 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Quote:
Cioè, è assurdo che ogni volta che deve essere fatta una iterazione di una Action parte un ciclo che si fa tutta la griglia e poi all'esecuzione dell'azione stessa su un solo droppable parte un altro ciclo che si rifà tutta la griglia (come nel caso di FlashAction). Ma un sistema ad eventi? Con dei listener ad esempio (come in Swing) . Quando una gemma smette di cadere si può fare che lancia un evento che ad esempio fa il controllo se ci sono gemme da crushare o che la fanno crushare attorno a se e cose del genere. Era già stato pensato? Ciao
__________________
GPU Compiler Engineer |
|
05-02-2008, 10:45 | #55 | |
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" |
|
05-02-2008, 10:46 | #56 | |
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" Ultima modifica di fek : 05-02-2008 alle 10:48. |
|
05-02-2008, 10:48 | #57 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
__________________
GPU Compiler Engineer |
05-02-2008, 10:59 | #58 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1536
|
Quote:
Porca trota mentre postavo qui e` crashato visual studio :o Tutta colpa del mio uber shader subsurface scattering + raytraced reflections da 10 istruzioni!!111 |
|
05-02-2008, 11:31 | #59 |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Ahaha gli uber shader di subsurface scattering sono sempre i migliori: flip della normale, NdotL rovesciato con triplo carpiato e passa la paura del subsurface scattering
E nessuno se ne accorge mai.
__________________
"We in the game industry are lucky enough to be able to create our visions" |
05-02-2008, 11:32 | #60 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
è normale che per il refactor this di CrushByFlashAction io debba aggiungere miliardi di test?
il fatto è che sto spostando CrushByFlashAction.updateCrushesOnFlash in un nuovo metodo FlashingGem.makeCrush, e con esso se ne stanno andando anche tutti i metodi privati "di servizio" che c'erano nella action; alcuni di questi metodi sono andati in FlashingGem, altri in Grid, e siccome quelli finiti in Grid sono pubblici li ho dovuti riscrivere test-driven |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:19.