Como un pequeño reto, debes de implementar la siguiente lógica en el componente de los sprite sheet animados, y tienes que implementar una lógica muy sencilla para variar la animación cada vez que se da un tap sobre la pantalla; para ello, puedes utilizar una propiedad numérica la cual indicará la animación a ejecutarse:
- animationIndex con el valor de cero, se muestra la animación de la muerte.
- animationIndex con el valor de uno, se muestra la animación de inactiva.
- animationIndex con el valor de dos, se muestra la animación de salto.
- animationIndex con el valor de tres, se muestra la animación de caminando.
- animationIndex con el valor de cuatro, se muestra la animación de corriendo.
Resolución reto
Como resolución, podemos utilizar un switch en la cual, realicemos el cambio de la animación según el valor de animationIndex que incrementaremos cada vez que ocurra el "tap" sobre la pantalla:
lib\components\player_sprite_sheet_component.dart
***
int animationIndex = 0;
***
@override
bool onTapDown(TapDownInfo info) {
super.onTapDown(info);
print(info);
animationIndex++;
if (animationIndex > 4) animationIndex = 0;
switch (animationIndex) {
case 1:
animation = dinoIdleAnimation;
break;
case 2:
animation = dinoJumpAnimation;
break;
case 3:
animation = dinoWalkAnimation;
break;
case 4:
animation = dinoRunAnimation;
break;
case 0:
default:
animation = dinoDeadAnimation;
break;
}
return true;
}
Como puedes ver, podemos variar fácilmente entre una animación a otra mediante un valor numérico que corresponde a un indice de la animación que se quiere animar.
Este snippet forma parte del proyecto completo:
https://github.com/libredesarrollo/flame-curso-libro-dinojump03
En el cual, vemos como crear la animación paso a paso; lo importante es notar lo sencillo que resulta hacer este tipo de integración, cada tecla del teclado esta asociada a una acción distinta como caminar, saltar o correr que a su vez está asociada a una animación distinta que es fácilmente cambiada asignando a la propiedad animation un valor distinto.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter