Maintenant que le personnage tire des salves laser, il est temps de faire des cartons. Ce sera un tout petit article puisqu’on a déjà toutes les connaissances nécessaires.

Mort d’un alien

Pour gérer la vie et la mort d’un alien nous avons besoin d’un nouvel état, dead.

state.aliens << {
  x: alien.x, y: alien.y,
  w: 50 * ALIEN_SCALE, h: 35 * ALIEN_SCALE,
  path: 'sprites/alien.png',
  dead: false,
}

On peut ainsi supprimer facilement les aliens décédés.

  def calc_aliens
    # ...
    state.aliens.reject!(&:dead)
  end

Un alien meurt quand il y a collision entre lui et un tir laser. Dans ce cas on n’oublie pas de faire disparaitre aussi le laser.

  def calc_shot
    # ...
    state.shots.each do |shot|
      # ...
      state.aliens.each do |a|
        if shot.intersect_rect?(a)
          shot.dead = true
          a.dead = true
        end
      end
    end
    state.shots.reject!(&:dead)
  end

Et réapparition

Pour qu’un alien mort puisse réapparaitre il faut que son état alive repasse à false, ce qui est une condition pour pouvoir être sélectionné (voir Apparition des aliens). Pour faciliter cela j’ajoute un ID à chaque alien.

    state.aliens_pool ||= [
      { x:400, y: 582, alive: false, id: 0 },
      { x:80, y: 432, alive: false, id: 1 },
      { x:700, y: 432, alive: false, id: 2 },
      { x:80, y: 282, alive: false, id: 3 },
      { x:900, y: 282, alive: false, id: 4 },
      { x:600, y: 142, alive: false, id: 5 },
    ]

Ce qui me permet de faire le lien entre aliens et aliens_pool lors de la mort d’un alien.

      state.aliens.each do |a|
        if shoot.intersect_rect?(a)
          shoot.dead = true
          a.dead = true
          state.aliens_pool[a.id].alive = false
        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