Création de jeux avec Game Maker
Adressage de variables dans les autres instances
Comme décrit plus haut, vous pouvez donner une valeur à une variable de l'instance courante en employant des instructions comme
x = 3;
Mais dans de nombreux cas, vous voudrez adresser les variables des autres instances. Par exemple, vous souhaiterez arrêter le déplacement de toutes les balles, ou encore déplacer le personnage principal à une position particulière, ou, dans le cas d'une collision, utiliser le sprite de l'autre instance concernée. Ceci peut être réalisé en précédant le nom de la variable avec le nom d'un objet suivi d'un point. Par exemple, vous pourrez écrire
ball.speed = 0;
Cela modifiera la vitesse de toutes les instances de l'objet ball. Il existe certains objets spéciaux :
- self: L'instance actuelle pour laquelle nous exécutons l'action
- other: L'autre instance concernée dans un événement de collision
- all: Toutes les instances
- noone: Aucune instance (cela peut paraître étrange mais cela a son utilité comme nous le verrons plus tard)
- global: Pas une instance mais un container qui stocke les variables globales
other.sprite_index = sprite5; all.speed = 0; global.message = 'A good result'; global.x = ball.x;
Vous vous demandez certainement ce que fera la dernière affectation en présence de plusieurs balles. Et bien, la première sera prise en compte et sa valeur x sera affectée à la variable globale.
Mais alors, comment faire pour régler la vitesse d'une balle particulière ? Cela est un peu plus difficile. Chaque instance posséde un ID unique. Lorsque vous placez des instances dans une room à l'aide de l'éditeur de room, l'ID de cette instance est affiché quand vous gardez le pointeur de la souris sur l'instance. Ce sont des nombres supérieurs ou égaux à 100000. Vous pouvez également utiliser ce nombre en le saisissant à gauche du point. Mais soyez prudent ! Le point sera interprété comme le point décimal du nombre. Afin d'éviter ce problème, mettez des parenthèses autour de l'ID. Par exemple, supposons que l'ID de la balle soit 100032, vous pourrez alors écrire :
(100032).speed = 0;
Lorsque vous créez une instance dans un programme, la valeur de retour sera égal à l'ID. Il est donc possible d'écrire ceci dans un programme :
{ nnn = instance_create(100,100,ball); nnn.speed = 8; }
Ceci aura pour effet de créer une balle et de régler sa vitesse. Veuillez noter que nous avons affecté l'ID de l'instance à une variable puis utilisé cette variable juste avant le point. Cela est parfaitement valide. Soyons plus précis. Un point est un opérateur. Il admet une valeur comme opérande de gauche et une variable (adresse) comme opérande de droite puis retourne l'adresse de cette variable particulière dans l'objet ou l'instance indiqué. Tous les noms d'objet, ainsi que les objets spéciaux mentionnés ci-dessus, représentent simplement des valeurs et peuvent donc être utilisés comme n'importe quelle valeur. Par exemple, le programme ci-dessous est tout à fait valide :
{ obj[0] = ball; obj[1] = flag; obj[0].alarm[4] = 12; obj[1].id.x = 12; }
La dernière instruction est à lire de la façon suivante. Nous prenons l'ID du premier élément. Pour toutes les instances concernées par cet ID, nous affectons 12 à la coordonnée x.
Les noms d'objet, les objets spéciaux et les ID d'instances peuvent également être utilisés dans de nombreuses fonctions. Ils seront considérés comme des constantes dans les programmes.
<< Traduction française par Philippe Ragni - (2005) >>
Alternative versions
Also available in:
Download helpfile