Le guide du débutant de Construct 2

3

Index

Taggé

Contributeurs

Statistiques

231,998 visites, 254,181 vues

Outils

Partager

Traductions

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 2 Mar, 2016. Last updated 25 Feb, 2019

Variables d'instance (Instance variables)

Les variables d'instance permettent à chaque monstre de stocker la valeur de sa propre santé. Une variable est juste une valeur qui change (ou varie) et elles sont stockées séparément pour chaque instance d'où le nom variable d'instance.

Ajoutons une variable d'instace health (santé) à notre objet Monster (monstre). Cliquez l'objet dans la barre de projet ou d'objets. Vous pouvez aussi revenir sur la vue de layout et cliquer sur l'objet "Monster" directement. Cela montrera les propriétés de l'objet dans la barre des propriétés. Cliquez sur Add/edit (Ajouter/éditer) dans la section Edit variables (Editer les variables).

La fenêtre des variables d'instance s'affiche. Elle ressemble à la fenêtre de Behaviors que nous avons vu précédemment, mais vous permet d'ajouter et de modifier les variables d'instance de l'objet. Cliquez sur le bouton vert Add (ajouter) pour en ajouter une nouvelle.

Dans la boîte de dialogue qui apparaît, tapez health pour le nom (name), laissez Type en tant que Number (nombre/numérique) et comme Initial value (valeur initiale) entrez 5 (comme illustré). Cela donnera 5 points de vie à tous nos monstres dès le départ. Quand ils seront touchés nous allons soustraire 1 dans la valeur de "health" et quand "health" tombe à 0 nous détruirons l'objet.

Une fois terminé, cliquez sur OK. Remarquez que la variable apparaît maintenant dans la fenêtre de variables d'instance ainsi que dans les propriétés du monstre. (Vous pouvez rapidement modifier la valeur de départ dans la barre des propriétés mais pour ajouter ou supprimer une variable d'instance vous devrez cliquer sur le lien Add / Edit (Ajouter/Editer).)

Modifier les événements

Retournez dans la feuille d’événements (Event sheet). Pour l'instant nous détruisons les monstres dès qu'ils sont touchés par une balle. Modifions cela afin de soustraire un point de vie.

Trouvez l’événement: Bullet - on collision with Monster.

Notez que nous avons une action "destroy monster". Remplaçons la par une action "subtract 1 from health". Cliquez droit sur l'action "destroy monster" et cliquez Replace (remplacer).

La même fenêtre que si nous étions en train d'ajouter une action s'affiche, mais cette fois elle remplacera l'action que nous avons sélectionné à la place. Choisissez Monster => Substract from (dans la catégorie Instance variables) -> la variable d'instance "health" et entrez 1 en tant que Value (valeur). Cliquez sur Done (finit). L'action devrait maintenant apparaître comme suit:

Maintenant quand nous touchons un monstre avec une balle, il perd un point de vie et la balle explose mais nous n'avons pas encore fait d’événement pour tuer le monstre quand sa vie est à 0. Ajoutons un nouvel événement:

Condition: Monster -> Compare instance variable -> Health, Less or equal, 0

Action: Monster -> Spawn another object -> Explosion, layer 1

Action: Monster -> Destroy

Pourquoi "less or equal 0" (inférieur ou égal à 0) plutôt que "equals 0" (égale 0) ? Supposons que vous ajoutiez une arme plus puissante qui soustrait 2 de health (santé). Lorsque vous tirez sur un monstre, sa santé ira de 5, 3, 1, -1, -3,...

Remarquez qu'à aucun moment health ne sera directement égal à 0, donc le monstre ne mourrait jamais !

Ainsi c'est une pratique correcte d'utiliser "less or equal" (inférieur ou égal) pour tester si quelque chose n'a plus de vie (health/santé).

Exécutez le jeu. Vous devez désormais toucher les monstres cinq fois pour les tuer !

Garder le score

Maintenant, ajoutons un score pour que le joueur sache qu'il a bien joué. Nous aurons besoin d'une variable de plus pour ceci. Vous pourriez penser "mettons le score en tant que variable d'instance de l'objet 'Player'". Ce n'est pas mal à priori mais souvenez vous que la valeur sera stockée "dans" l'objet. Si il n'y a pas d'instance de l'objet, il n'y a pas de variables d'instance non plus ! Donc si nous détruisons le joueur, nous ne pouvons plus savoir quel était le score car la valeur a disparu avec l'instance.

A la place, utilisons une global variable (variable globale). Comme une variable d'instance, une variable globale (ou juste "globale") peut stocker du texte ou un nombre. Chaque variable peut stocker un nombre ou un seul morceau de texte. Les variables globales sont aussi disponibles à travers tous les layouts, utile si nous voulons ajouter d'autres niveaux.

Cliquez droit dan l'espace en bas de l'event sheet (feuille d'évènements) et sélectionnez Add global variable (ajouter une variable globale).

Entrez Score en tant que nom (name). Les autres champs sont OK, cela fera commencer le nombre (number) à 0.

Maintenant la variable globale apparaît en tant qu'une ligne dans la feuille d’événements. Elle est placée dans cette event sheet mais est accessible depuis n'importe quelle autre event sheet depuis n'importe quel autre layout.

Note: Il y a aussi des local variables (variables locales) qui ont une plus faible "portée" et ne peuvent être accédées que par des événements "proches". Pour l'instant nous n'avons pas besoin de nous soucier de celles-ci.

Donnons au joueur un point à chaque fois qu'il tue un monstre. Dans notre événement "Monster: health less or equal 0" (La variable d'instance "health" (santé) de l'objet "Monster" (monstre) est inférieur ou égale à 0) (quand un monstre meurt donc), cliquez Add action (ajouter une action) et sélectionnez System -> Add to (ajouter dans la catégorie "Global & local variables") -> Score, value (valeur) 1.

Maintenant l’événement devrait ressembler à ceci:

Désormais le joueur a un score qui augmente de 1 pour tout monstre tué, mais il ne peut pas le voir ! Affichons le score à l'aide de l'objet "text" (texte).

  • 0 Comments

Want to leave a comment? Login or Register an account!