Écrire un jeu en 2d avec Ruby et Gosu - partie 6
Pour augmenter l’effet dramatique lorsque le joueur perd une vie, je voudrais
que celui-ci se mette à tourner sur lui-même. Pour ça, on affichera l’image du
joueur selon un certain angle, et cet angle sera mis à jour à chaque appel de
update
. Voyons cela pas à pas.
La totalité des articles:
- Installation de Gosu, affichage d’images statiques
- Déplacer le joueur et pluie de smileys
- Beep, fonte et collecte des smileys
- On s’occupe des vies
- Musique et game over
- Affichage selon un angle
- Plusieurs musiques et reset de la partie
Affichage selon un angle
Il nous faut d’abord un angle:
Ensuite nous ajoutons une méthode update
à la classe Player. Quand le joueur
vient de perdre une vie, la seule chose à mettre à jour est l’angle. Dans les
autres cas, on fait la même mise à jour qu’avant:
La mise à jour de l’angle d’affichage de l’image du joueur ne demande pas d’explications:
En ce qui concerne la mise à jour générale, j’ai effectué un petit refactoring
pour passer dans la classe Player du code venant de la classe Window, et qui
n’avait pas à s’y trouver. Au passage j’ai aussi créé le module Button
qu’on
verra plus tard:
On peut maintenant regarder l’affichage. Pour afficher une image selon un
certain angle, Gosu propose la méthode draw_rot
. L’image sera orientée par
rapport à un point précis, ici je choisi le centre de l’image:
Voici tout ce qui change dans la classe Player
en un coup d’œil:
Voici maintenant le contenu du module Button
:
On peut légitimement se demander «Mais pourquoi ajouter un tel module ?». Simplement parce que je préfère 100 fois lire ceci:
do_this if Button.left?
… plutôt que cela:
do_this if Gosu::button_down?(Gosu::KbLeft)
Voyons enfin ce qui change dans la classe Window.
J’ai déplacé la ligne return if @player.just_lost_a_life?
de la méthode
update
vers la méthode update_items
. Ainsi la méthode update_player
est
toujours appelée et peut changer l’angle d’affichage du joueur:
Pour finir, voici le contenu du jeu pour l’instant:
$ tree
.
├── assets
│ ├── fonts
│ │ └── VT323
│ │ ├── OFL.txt
│ │ └── VT323-Regular.ttf
│ ├── images
│ │ ├── background.png
│ │ ├── heart.gif
│ │ ├── player.png
│ │ ├── smiley-green.png
│ │ └── smiley-yellow.png
│ ├── songs
│ │ └── Around the Bend.ogg
│ └── sound
│ ├── collect.wav
│ └── life-lost.wav
├── button.rb
├── main.rb
├── player.rb
├── smiley.rb
├── ui.rb
├── window.rb
└── z_order.rb
Le code et les assets se trouvent sur Github. La version précise pour cet article est la version 0.6.0.