Scratch : initialiser les clones
Après vous avoir présenté les clones avec Scratch, il est temps d’aborder le sujet de script d’initialisation. Il s’agit des scripts qui doivent être déclenchés à la création des sprites, en général au click du drapeau vert. Oui mais le sprite est créé après l’évènement et ne pourra pas y réagir.
Les clones ont leur propre déclencheur. Mais par habitude, vous ne savez pas forcément où mettre le code d’initialisation et tendance à continuer à utiliser le sprite parent. Je vais vous montrer dans cet article comment commencer avec des clones.
Commençons avec un sprite
Reprenons une scène simple : un nuage qui doit se déplacer de gauche à droite.
Avec Scratch, je vais créer un script déclenché au click du drapeau vert. Je vais placer le nuage à sa position de départ puis créer la boucle qui va animer ce nuage. Je vais appeler ce script le script d’initialisation. C’est le script qui va donner tout son comportement au sprite au démarrage du programme.
Je pense que vous pouvez arriver à un code comme celui ci-contre. Les coordonnées de bord ne sont pas top, mais ça fait le job.
Et maintenant avec deux nuages (dont un clone)
Si je veux deux nuages dans ma scène, je peux n’utiliser qu’un sprite de nuage et le cloner. C’est ce que je vous ai montré dans l’article précédent. Certes, mais maintenant, je souhaite aussi animer ces nuages.
Le problème, c’est que je ne peux plus mettre la boucle d’animation à la suite du script du drapeau vert. En effet, au déclenchement de la scène (click sur le drapeau vert), le script du parent est activé. Celui-ci se déplace, se clone et s’anime. Mais lorsque le clone est créé, aucun script d’initialisation n’est déclenché. Le script d’initialisation du sprite se déroule pour le parent, pas pour le clone pour qui l’événement click drapeau vert est passé.
Pour répondre à ce cas, nous avons un bloc « Quand je commence comme un clone » qui va permettre de déclencher un script au moment de la création du clone. Très logiquement, je vais pouvoir placer cette boucle dans ce script. Mais attention, ce script sera déclenché à la création d’un clone, le parent ne commence jamais comme un clone. Du coup, je me retrouve avec une partie du code qui est dupliquée comme ci-dessous.
La duplication de code, c’est pas terrible. Jamais. Si j’ai besoin de changer la vitesse des nuages, je devrai le faire à deux endroits, c’est un risque d’oubli ou d’erreur. Sans parler de comportements inattendus.
Je vais éliminer également l’usage des blocs personnalisés. Ils paraissent judicieux ici, mais l’exemple est trop simple pour mettre en évidence que nous arriverions aussi rapidement à une duplication de code.
Avec les clones, il faut travailler différemment.
Un générateur de clones et des sprites.
Si un de nos sprites doit être dupliqué un certain nombre (inconnu) de fois, je vais uniformiser les actions et éviter de travailler avec un parent et des clones mais uniquement des clones. L’initialisation se fera donc dans le script déclenché par quand je commence comme un clone. Le parent ne servira qu’à créer des clones.
Pour cela, je vais commencer par cacher le parent, je ne l’utiliserai pas dans ma scène. Ensuite, je vais déplacer ce parent à chaque position de départ des nuages et créer un clone à chaque fois. Oui, il va se comporter un peu comme un tampon. Et c’est tout.
Dans le script d’initialisation des clones, après l’avoir affiché, je déclenche simplement le déplacement.
Le principe maintenant, c’est que ce sprite que vous programmez ne sert qu’à créer des clones. Il initialise si nécessaire tout ce qui va être commun aux clones. L’initialisation de l’élément dans la scène se fait lors de la création du clone.
Si vous avez aimé ce post, n’hésitez pas à laisser un commentaire ci-dessous ou sur la page Facebook 😉
À propos de... Darko Stankovski
iT guy, photographe et papa 3.0, je vous fais partager mon expérience et découvertes dans ces domaines. Vous pouvez me suivre sur les liens ci-dessous.