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.

Si on joue à notre jeu en faisant parcourir à notre personnage toutes les plateformes de la gauche vers la droite, puis retourner tout à gauche, on peut voir sur le côté droit des morceaux des deux plateformes 2 et 3 qui traînent.

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 :

Pour la plateforme 1, on repeint simplement la plateforme en blanc.
Pour la plateforme 2, dupliquez la plateforme 1. Repeignez en jaune et ajoutez un rectangle plein.
Pour la plateforme 3, dupliquez la plateforme 2. Repeignez en vert et déformez le rectangle pour lui donner une apparence de cuvette. Ajoutez un rectangle rouge (pour faire de la lave).
Dans le cas du rectangle vert, on peut utiliser l’outil “Redessiner” qui permet, en ajoutant des points à la forme (il suffit de cliquer dessus), de la changer.
Résultat après avoir ajouté 4 points.
Plateforme 3 dans le jeu. Notre joueur, pour l’instant, ne meurt pas quand il touche la lave.

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 :

Si la variable FIN contient quelque chose (un mot est toujours plus grand que rien) alors on sort de la boucle d’action. On remet à zéro et on réinitialise le jeu. Et la boucle d’action se relance jusqu’à ce qu’on meurt de nouveau.

Créons maintenant une animation de mort grâce à un nouveau bloc “Mort” :

Quand le joueur meurt, il clignote puis disparaît.

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 :

Si le joueur dépasse le bas de l’écran (y à -180), alors il meurt par 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 :

Les clones se suppriment d’eux-mêmes à chaque remise à zéro.

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” :

Si le joueur touche la couleur rouge de la lave il meurt par fusion.

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 ?

--

--

Classeur Voyageurs du Numérique à la Gaité Lyrique

Tous les derniers mardis de chaque mois, à la Gaité Lyrique, 3 bis rue Papin, 75003 PARIS, de 18h à 20h, entrée libre !