Les fonctions


La définition générale d'une fonction dans GML est quelque chose comme ceci:

Une fonction a une entrée et une sortie, et la sortie est liée d'une manière ou d'une autre à l'entrée.

Dans GameMaker Studio 2 vous utilisez des fonctions faisant partie de la structure du code pour faire bouger les choses dans votre jeu et vous disposez d'un grand nombre de fonctions GML, qui sont toutes expliquées dans la section Référence du langage du manuel.

En GML, une fonction a la forme d'un nom de fonction, suivi des arguments d'entrée entre parenthèses et séparés par des virgules (si la fonction n'a pas d'arguments en entrée, seuls les parenthèses sont utilisées). Voici un aperçu de la structure d'une fonction:

<function>(<arg0>, <arg1> ,... <arg15>);

Généralement, il existe deux types de fonctions - d'abord, il y a l'énorme collection de fonctions intégrées qui sont utilisées pour contrôler tous les aspects de votre jeu, et, deuxièmement, tous les scripts que vous définissez dans votre jeu peuvent aussi être utilisés comme fonction ( mais pas toujours).

Certaines fonctions renvoient des valeurs et peuvent être utilisées dans des expressions, tandis que d'autres exécutent simplement des commandes, comme illustré dans les deux exemples suivants:

instance_destroy();                              // Destroy the calling instance - this requires no arguments and returns nothing
dist = point_distance(x, y, mouse_x, mouse_y;    // Get the distance from the current instance position to the mouse position - takes four arguments and returns a real value

Vous devez noter qu'il est impossible d'utiliser une fonction en tant que partie gauche d'une affectation. Par exemple, le code suivant vous donnerait une erreur:

instance_nearest(x, y, obj).speed = 0;

La valeur de retour pour l'expression dans cet exemple de code est un nombre réel (valeur d'ID unique pour l'instance la plus proche) et doit donc être entre parenthèses pour être utilisé de cette manière et adresser correctement l'instance requise (voir Adressage de variables dans d'autres Instances pour plus d'informations). Le code ci-dessus serait correctement écrit comme:

(instance_nearest(x, y, obj)).speed = 0;
//or
var inst = instance_nearest(x, y, obj);
inst.speed = 0;