Dans les sections consacrées aux variables, vous avez découvert comment créer et créer et utiliser des variables au sein d'une même instance, ou sur une portée globale, mais que se passe-t-il si vous souhaitez qu'une instance accède à une variable différente? Il y a beaucoup de cas où vous pouvez vouloir faire ceci, par exemple dans une collision avec un objet de balle, vous voudrez peut-être découvrir combien de dommages la balle fait en accédant à une variable dans la balle, ou vous pourriez vouloir arrêter le mouvement de toutes les balles dans un puzzle, ou vous pourriez vouloir déplacer le personnage principal à une position particulière, ou n'importe quel nombre d'autres situations que vous rencontrez généralement dans n'importe quel jeu. Heureusement, le langage GameMaker est équipé de mécanismes pour y parvenir.
L'une des méthodes les plus courantes pour accéder ou modifier une variable dans une autre instance consiste à utiliser son nom d'objet comme identifiant, puis à utiliser un point "." pour indiquer à GameMaker Studio 2 que la variable utilisée après doit être affectée ou modifiée dans cet objet. En pratique, cela ressemblerait à ceci:
obj_ball.speed = 0;
Avec le code ci-dessus vous définissez la vitesse d'une instance de " obj_ball Cependant, si vous avez plus d'une instance de l'objet dans la pièce, elle s'appliquera à TOUS d'entre eux de la même manière - sauf si vous utilisez l'une des cibles JS ou HTML5, auquel cas elle n'en affectera qu'une, mais vous n'avez aucun moyen de savoir lequel il affectera - donc si vous avez besoin d'accéder à toutes les instances d'un objet, vous devriez utiliser with, comme c'est 100% cross-plate-forme compatible. En général, ce format ne doit être utilisé que si vous avez une seule instance de l'objet dans la pièce, ou (comme vous le verrez dans la partie suivante) quand vous avez un identifiant d' instance spécifique.
Vous pouvez également accéder à une seule instance d'un objet lorsqu'il existe plusieurs instances dans la pièce en utilisant le nom d'instance unique pour indiquer à GameMaker Studio 2 exactement quelle instance nous souhaitons adresser. La constante de nom d'instance est la constante d'identification unique attribuée à chaque instance ajoutée à une pièce de votre jeu. Lorsque vous placez des instances dans une pièce de l'éditeur de pièce, ce nom d'occurrence est affiché dans la fenêtre des propriétés de l'instance (affiché lorsque vous double-cliquez sur une occurrence dans l'éditeur) et peut être utilisé comme partie gauche du point:
inst_4DB70D2.speed = 0;
Vous pouvez également utiliser des variables à gauche du point, à condition que la variable en question ait stocké un identifiant d'instance valide. Les exemples suivants illustrent cela.
// Example 1 var inst = instance_position(mouse_x,
mouse_y, all);
if instance_exists(inst)
{
inst.speed = 0;
}
// Example 2
var new_inst = instance_create_layer(random(room_width),
random(room_height), "Enemies", obj_E_Parent);
new_inst.direction = point_direction(new_inst.x, new_inst.y, x,
y);
new_inst.target = id;
Notez que vous ne pouvez pas utiliser le mot clé spécial " all "avec cette méthode pour cibler toutes les instances, mais vous pouvez utiliser les mots-clés" other " et " self "sans problèmes, par exemple en utilisant other dans un événement de collision:
// Example 3 other.hp -= 10;
if other.hp <= 0
{
other.sprite_index = spr_E_Dead;
}
Notez que le code ci-dessus dans l'exemple 1 a un instance_exists() appeler dans le bloc de code. En effet, l'utilisation de la méthode point pour accéder ou modifier une autre valeur d'instance donnera une erreur et écraser le jeu si l'instance n'existe pas, et il est possible que ce soit le cas. Nous n'avons pas besoin de la vérification dans les exemples 2 et 3 car nous savons que l'instance est là puisque dans l'exemple 2 nous l'avons créé, et dans l'exemple 3, c'est l'autre instance dans un événement de collision. Cependant, s'il existe une possibilité que l'instance puisse être détruite, désactivée ou retirée de la salle en utilisant cette méthode, vous devez toujours vérifier au préalable instance_exists() fonction ou la instance_number() fonction.
Ce sont tous des moyens parfaitement valables de lire, de modifier et de définir des variables dans d'autres cas, et de travailler parce que le point est en fait un opérateur. Il prend une valeur en tant qu'opérande gauche et une variable (adresse) en tant qu'opérande droit, et renvoie l'adresse de cette variable particulière dans l'objet ou l'instance indiqué. Tous les noms d'objets, constantes, identifiants, etc... représentent simplement des valeurs et celles-ci peuvent être traitées comme n'importe quelle autre valeur.