Closed Johelious closed 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.
Si, cuando pueda mirare de hacer algo al respecto
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).
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)
¡Genial! Creo que así quedará impoluto desde la perspectiva de la lógica del juego. ;-)
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.
Genial, este bug ya no ocurre!
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.