rsanchezsaez / wiatches-iphone

1 stars 0 forks source link

[BUG] El cartel de WIN sale antes de que termine la cascada #258

Closed Johelious closed 13 years ago

Johelious commented 13 years ago

Cuando una cascada produce el YouWin, el cartel sale antes de que terminen de salir los rayos. El cartel debería salir cuando el último rayo se haya reproducido, y nunca si quedan monedas en pantalla. En ese caso, el juego debe esperar hasta que no haya monedas, ya sea por que desaparecen o porque el jugador las recoge.

rsanchezsaez commented 13 years ago

Este BUG en realidad es un WIP por lo siguiente:

Ahora, una cascada termina cuando el último rayo que mata al último enemigo cae al suelo, y el enemigo en cestión explota y es eliminado del juego. Cuando el bicho muere, el último Rayo sigue animándose hasta desaparecer del todo y la Soul del bicho empieza a flotar.

En el gameplay normal (no GameOver), este instante indica cuando te dejan disparar el siguiente hechizo. Puedes disparar el siguiente hechizo sin problemas porque la animación del Soul y del Rayo desapareciendo pueden seguir ejecutándose mientras tu disparas el siguiente hechizo, sin interferir con tu acción.

Cuando es GameComplete, el evento GameComplete se dispara cuando ha acabado la cascada, es decir, en el instante que comento anteriormente.

Para obtener la funcionalidad deseada (que tiene toda la lógica del mundo), solo hay que implementar un check en el GameOver para que si quedan monedas en juego, no se ejecute GameComplete hasta que las monedas desaparezcan.

No es muy complicado de implementar.

Smauky commented 13 years ago

Si, cuando pueda mirare de hacer algo al respecto

rsanchezsaez commented 13 years ago

Aquí lo suyo sería, agregar un nuevo método antes de gameComplete que se llame checkGameComplete. y en vez de [gameLayer gameComplete] se llame a [gameLayer checkGameComplete].

En este método, que compruebe si hay monedas en pantalla. Si no hay monedas se llama [gameLayer gameComplete], y si hay monedas, active una variable BOOL que haga que al final de los métodos [enemyGrid checkCollideWithTreasureAtPosition], y [enemyGrid removeTreasure] llame a [gameLayer checkGameComplete].

En ese sentido, creo que deberíamos transladar los métodos addTreasureWithCombo, checkCollideWithTreasureAtPosition y removeTreasure de EnemyGrid a GameLayer, porque creo que tiene más razón de ser que estén en GameLayer, que en EnemyGrid. En este escenario enemyGrid, cuando quiera generar un treasure, llamaría al método addTreasureWithCombo igual que lo llama ahora, pero en vez de [self addTreasureWithCombo], sería [(GameLayer*)self.parent addTreasureWithCombo].

Esto también nos ayudará si al final hacemos el cambio de convertir el EnemyGrid en un SpriteBatchNode, para que el EnemyGrid solo tenga enemigos (y cosas relacionados).

Smauky commented 13 years ago

Como hemos hablado en skype, asi lo hare.

Todo el codigo base pasara a la clase TreasureHandler, la cual estara en GameLayer en lugar de en EnemyGrid como esta ahora, y la primera vez que se llame al nuevo metodo checkGameComplete, apartir de entonces sera llamado por los metodos de tesoro de checkCollision y remove, en el momento que no queden mas monedas en pantalla se llamara al evento del cartel (o el futuro evento que habra, por que este tambien lo cambiaremos segun me dijo kike, no sera tan grande como el gameover, pero algo mas le meteremos, aunque solo sean unos fuegos aritificiales por particulas)

rsanchezsaez commented 13 years ago

¡Genial! Creo que así quedará impoluto desde la perspectiva de la lógica del juego. ;-)

Smauky commented 13 years ago

Bueno, ya esta implementado, que ya tocaba, jeje, ahora ya se pueden recoger las monedas al terminar una pantalla, el cartel se retrasa hasta que la ultima moneda/botella de mana se haya recogido o desaparecido.

Recuerdame Ricardo que hable contigo de este tema en la reunion de mañana que quiero comentarte una cosa sobre los cambios que he tenido que hacer en los metodos de Touch.

Johelious commented 13 years ago

Genial, este bug ya no ocurre!