3.2. Intégration des sprites
Maintenant que nous avons le mécanisme requis pour afficher une animation à l'écran, il est maintenant temps d'intégrer les animations dans la classe Avatar
afin que celles-ci soient jouées aux bons moments.
Étapes à suivre
- ajoutez les variables de direction nécessaires pour déterminer l'orientation du personnage.
- ajoutez la méthode
turn
à l'intérieur deAvatar
afin de jouer l'animation nécessaire dépendamment de l'orientation.
/* Avatar.java */
package com.tutorialquest.entities;
// import ...
public class Avatar extends Entity {
// ...
// AJOUT: Constante utilisé pour déterminer un changement de direction
private static float TURN_EPSILON = 0.5f;
// AJOUT:
// ajout des variables de direction
private Vector2 direction = new Vector2(0, -1);
private Utils.Direction fixedDirection = Utils.Direction.DOWN;
// ...
// AJOUT
public void turn()
{
// Section qui joue l'animation `IDLE`
// lorsque l'avatar est immobile
// lorsque controlAxes est égal à zéro
// lorsque aucune entrée au clavier
if (controlAxes.epsilonEquals(Vector2.Zero)) {
switch (fixedDirection) {
case LEFT:
case RIGHT:
sprite.play(SpriteUtils.IDLE_SIDE, false);
break;
case UP:
sprite.play(SpriteUtils.IDLE_BACK, false);
break;
case DOWN:
sprite.play(SpriteUtils.IDLE_FRONT, false);
break;
}
return;
}
// Section pour l'animation `WALK`
// Lorsque l'entrée au clavier est plus grande que zéro
// Mise à jour des variables de direction
if (controlAxes.x > TURN_EPSILON) {
direction.set(1, direction.y);
fixedDirection = Utils.Direction.RIGHT;
sprite.flipX = false;
sprite.play(SpriteUtils.WALK_SIDE, false);
} else if (controlAxes.x < -TURN_EPSILON) {
direction.set(-1, direction.y);
fixedDirection = Utils.Direction.LEFT;
sprite.flipX = true;
sprite.play(SpriteUtils.WALK_SIDE, false);
}
if (controlAxes.y > TURN_EPSILON) {
direction.set(direction.x, 1);
fixedDirection = Utils.Direction.UP;
sprite.flipX = false;
sprite.play(SpriteUtils.WALK_BACK, false);
} else if (controlAxes.y < -TURN_EPSILON) {
direction.set(direction.x, -1);
fixedDirection = Utils.Direction.DOWN;
sprite.flipX = false;
sprite.play(SpriteUtils.WALK_FRONT, false);
}
// Normalisation du vecteur de direction
direction.nor();
}
@Override
public void update(float deltaTime) {
super.update(deltaTime);
control(deltaTime);
turn();
position.add(velocity);
sprite.update(deltaTime);
}
@Override
public void render(SpriteBatch spriteBatch) {
sprite.render(spriteBatch, position);
super.render(spriteBatch);
}
}
Activité
Créez la classe
EnemySprite
dans laquelle vous spécifiez les animations propres à l'ennemi depuis le fichierassets/monster_sprite.png