Il est plus que temps de faire se déplacer les aliens.

Le plus simple est de leur donner une limite à droite x_max et une à gauche x_min. Et pourquoi ne pas leur donner à chacun une vitesse unique ?

    state.aliens_pool ||= [
      { x: 420, y: 582, w: ALIEN_W, h: ALIEN_H, alive: false, id: 0, speed: 2, x_min: 410, x_max: 1_000 },
      { x: 80, y: 432, w: ALIEN_W, h: ALIEN_H, alive: false, id: 1, speed: 0.8, x_min: 50, x_max: 120 },
      { x: 700, y: 432, w: ALIEN_W, h: ALIEN_H, alive: false, id: 2, speed: -1.8, x_min: 410, x_max: 1_000 },
      { x: 80, y: 282, w: ALIEN_W, h: ALIEN_H, alive: false, id: 3, speed: 0.7, x_min: 50, x_max: 120 },
      { x: 900, y: 282, w: ALIEN_W, h: ALIEN_H, alive: false, id: 4, speed: 1.7, x_min: 410, x_max: 1_000 },
      { x: 200, y: 142, w: ALIEN_W, h: ALIEN_H, alive: false, id: 5, speed: 2, x_min: 50, x_max: 1_200 },
      { x: 900, y: 142, w: ALIEN_W, h: ALIEN_H, alive: false, id: 5, speed: -2, x_min: 50, x_max: 1_200 },
    ]

Et on inverse la direction quand une limite est atteinte.

    state.aliens.each do |alien|
      alien.x += alien.speed
      if alien.x <= alien.x_min || alien.x >= alien.x_max
        alien.speed = -alien.speed
      end
    end

Je vais aussi faire une petite animation quand ils marchent. Elle va simplement consister à inverser le sens du sprite en boucle. Pour cela on utilise la propriété flip_horizontally d’un sprite.

ALIEN_ANIMATION = 15

state.aliens << alien.dup.merge({
  path: 'sprites/alien.png',
  dead: false,
  flip_horizontally: false,
  animation_counter: ALIEN_ANIMATION,
})

Et donc on inverse le sprite dans le sens horizontal toutes les 15 frames. Une animation du pauvre en quelque sorte.

state.aliens.each do |alien|
  # ...
  alien.animation_counter -= 1
  if alien.animation_counter == 0
    alien.animation_counter = ALIEN_ANIMATION
    alien.flip_horizontally = !alien.flip_horizontally
  end
end

Références

  1. Vous trouverez le code de Jetpack Hero sur github
  2. Documentation de DragonRuby


/ / / / / / / / / /


Cet article fait partie d’une série :

  1. Jetpack Hero
  2. Partie II
  3. Une platforme, des collisions
  4. Première animation du personnage
  5. Ajouter des platformes
  6. Du carburant pour le jetpack
  7. Collecte de minerai
  8. Effets sonores
  9. Du rangement avec la classe Game
  10. Apparition des aliens
  11. Tir du personnage
  12. On dégomme de l’alien
  13. GAME OVER
  14. Les aliens bougent enfin