Apparition des aliens (Jetpack Hero)
Il est temps d’ajouter des ennemis dans notre jeu. Ce seront des aliens roses. Vous pouvez voir à quel point j’ai fait des progrès en graphisme :D
Dans le jeu les aliens peuvent se téléporter en créant des portails. J’aimerai une petite animation qui suggererait un portail avant que l’alien apparaisse. Et puis ça laissera le temps au joueur de réagir.
J’ai trouvé ce pack d’effets graphique parfait pour çà.
Les bases
Je crée un hash aliens
, vide au départ, qui contiendra les aliens au fur et à
mesure de leurs téléportations dans la zone de jeu.
state.aliens ||= []
De même, je crée un hash aliens_apparition
qui contiendra les animations des
portails.
state.aliens_apparition ||= []
Je crée aussi un aliens_pool
, pour savoir à quels endroits les aliens peuvent
apparaitrent.
state.aliens_pool ||= [
{ x:400, y: 582, alive: false },
{ x:80, y: 432, alive: false },
{ x:700, y: 432, alive: false },
{ x:80, y: 282, alive: false },
{ x:900, y: 282, alive: false },
{ x:600, y: 142, alive: false },
]
Finalement il ne faut pas oublier d’afficher les animations et les aliens.
outputs.sprites << state.aliens_apparition
outputs.sprites << state.aliens
Animation des portails
def calc
calc_init
calc_aliens
# ...
end
Dans la 1ère partie de calc_aliens
chaque alien du pool a une chance sur mille
de se téléporter (rand(1_000) == 0
) à chaque frame, si il n’est pas déjà en jeu (alien.alive == false
).
Si la chance lui sourit, on crée un portail aux bonnes coordonnées dans aliens_apparition
.
def calc_aliens
state.aliens_pool.each do |alien|
if alien.alive == false && rand(1_000) == 0
alien.alive = true
state.aliens_apparition << {
x: alien.x, y: alien.y,
w: 50 * ALIEN_SCALE, h: 35 * ALIEN_SCALE,
start_looping_at: Kernel.tick_count,
finished: false,
}
break
end
end
Dans la seconde partie on s’occupe d’animer les portails avec la méthode
utilitaire frame_index
fournie par DragonRuby. Et lorsque l’animation est terminée, on la retire du hash
state.aliens_apparition
et on ajoute un alien au même endroit de l’écran dans
le hash state.aliens
.
Les paramètres de frame_index(10, 8, false)
sont ici :
- 10 : le nombre de sprites dans l’animation.
- 8 : le temps d’affichage de chaque sprite, en nombre de frame.
- false : c’est un one shot, cette animation ne boucle pas.
state.aliens_apparition.each do |portail|
sprite_index = portail.start_looping_at.frame_index(10, 8, false)
if sprite_index
portail.path = "sprites/apparition-#{sprite_index}.png"
else
portail.finished = true
state.aliens << {
x: portail.x, y: portail.y,
w: 50 * ALIEN_SCALE, h: 35 * ALIEN_SCALE,
path: 'sprites/alien.png',
}
end
end
state.aliens_apparition.reject!(&:finished)
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