Les bons tutos de Xavier : Comment faire un jeu de plateforme avec Scratch
4ème partie : La mort
(Ce tuto est une adaptation en français sur Scratch 3.0 du tuto de Griffpatch sur Youtube)
Correction d’un bug récurrent dans Scratch
Les développeurs de Scratch ont volontairement décidé qu’un sprite ne pouvait pas complètement disparaître de l’écran, afin que les enfants ne se retrouvent pas démunis lorsque celui-ci se retrouve par inadvertance en des coordonnées trop éloignées. Donc, dans notre jeu en scrolling, on peut voir des morceaux de sprites qui traînent sur les bords de l’écran de jeu.
Pour régler ce problème, on va utiliser une propriété des sprites. Les coordonnées de chacun de ceux-ci sont récupérables en temps réel (blocs <abscisse x> et <ordonnée y> de la catégorie bleue ‘mouvement’). En comparant leurs valeurs avec celles contenues dans nos variables (les vraies coordonnées), on peut ainsi savoir si Scratch a déplacé les sprites ou non. S’il les a déplacés, alors on les cache (car ils ne devraient par apparaître à l’écran), sinon on les affiche. Enfin, pour éviter le temps d’attente dû au calcul, on va englober tout ça dans un nouveau bloc à affichage sans rafraîchissement d’écran :
N’oubliez pas de modifier le code de l’action en conséquence :
À partir de maintenant, les bouts de plateforme ne traînent plus sur les bords de l’écran.
Modification visuelle du jeu
Maintenant que les mouvements de notre joueur et des plateformes sont corrects, on va modifier un peu l’apparence de l’ensemble.
Changez l’arrière-plan de la scène et repeignez-le en noir.
Recommencez les plateformes 1, 2 et 3 afin qu’elles ressemblent à ceci :
Faire mourir le joueur
Créons tout d’abord une variable globale (pour tous les sprites) pour notre joueur :
- FIN (qui indique la fin du jeu)
Puis initialisons-la à rien :
Si la variable FIN contient quelque chose alors cela voudra dire que notre joueur est mort.
Grâce à cette variable, nous pouvons arrêter la boucle d’action, en ajoutant ce bloc de test :
Créons maintenant une animation de mort grâce à un nouveau bloc “Mort” :
Il ne reste plus qu’à faire mourir le joueur quand il tombe d’une plateforme ou quand il touche la lave.
Pour rendre le code plus logique maintenant qu’on peut arrêter la boucle d’action grâce à la variable FIN, on va déplacer les positionnements de la boucle d’action dans le bloc “Action”. On y ajoutera alors ensuite le test de chute :
Testons
Lancez le jeu et faites tomber le joueur d’une plateforme. Vous allez le voir clignoter puis disparaître. Et le jeu va reprendre depuis le début. Notre code semble vraiment efficace !
Pourtant, on a oublié quelque chose qui peut faire drastiquement chuter les performances du jeu à la longue. En effet, à chaque fois qu’on réinitialise le jeu, on recrée les 2 clones de plateforme (2 et 3) mais sans avoir préalablement effacé les précédents. Les nouveaux clones sont toujours créés exactement au-dessus de leurs semblables. On ne voit rien. Scratch doit tous les prendre en compte à chaque fois que le joueur se déplace. D’où un travail de plus en plus important, et inutile. Pour éviter cela, on va ajouter un code de remise à zéro dans le sprite de la plateforme :
Mort à cause de la lave
Pour faire mourir le joueur quand il touche la lave on va ajouter un nouveau bloc de test de mort, pour lequel on n’oubliera pas de cocher l’option “sans rafraîchissement d’écran” :
Il faut faire ce test avant que le code ne ramène notre sprite de joueur au-dessus de la couleur rouge. En effet, le jeu considère à la base la lave comme un morceau de plateforme. Si on la touche, par défaut, il nous ramène à sa surface. On va donc insérer ce nouveau bloc de test juste avant qu’il nous ramène à la surface, dans le bloc “Ajouter à y” :
Et pour faire bonne mesure, on va aussi l’ajouter sur les déplacements horizontaux, dans le bloc “Ajouter à x” :
Et voilà ! Notre joueur meurt maintenant quand il tombe dans la lave. Cool, non ?