On dégomme de l'alien (Jetpack Hero)
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
- Vous trouverez le code de Jetpack Hero sur github
- Documentation de DragonRuby
Cet article fait partie d’une série :
- Jetpack Hero
- Partie II
- Une platforme, des collisions
- Première animation du personnage
- Ajouter des platformes
- Du carburant pour le jetpack
- Collecte de minerai
- Effets sonores
- Du rangement avec la classe Game
- Apparition des aliens
- Tir du personnage
- On dégomme de l’alien
- GAME OVER
- Les aliens bougent enfin
Commentaires
Pas encore trouvé de solution simple et non-invasive pour avoir des commentaires sur le blog. En attendant vous pouvez laisser votre Commentaire sur mastodon@lkdjiin