Le langage GameMaker (GML) vous permet également d'accéder à certaines structures de données et à certains tampons en utilisant des expressions logiques appelées accesseurs. Ceci est fait de la même manière que pour travailler avec des tableaux seulement nous utilisons un symbole d'identifiant avant le premier argument pour indiquer à GameMaker Studio 2 que vous travaillez sur une structure de données (précédemment créée).
Vous pouvez ajouter, remplacer et obtenir des valeurs et des clés pour les types de structure de données suivants: ds_maps, ds_lists et ds_grids. Chacun a reçu son propre symbole et sa propre méthode pour accéder, modifier ou définir des valeurs, comme indiqué ci-dessous.
La syntaxe des listes est:list_index[| index]
Donc, quand vous avez utilisé ds_list_create() Pour créer votre liste, vous devez utiliser l'index de la liste (que vous avez stocké dans une variable) pour le référencer, la valeur "index" étant la position dans la liste à définir ou à ajouter. Par exemple, le code suivant crée une liste, puis ajoute 10 entrées, définissant chaque entrée sur un nombre aléatoire compris entre 0 et 9:ds = ds_list_create();
var index = 0;
repeat(10)
{
ds[| index++] = irandom(9);
}
Une fois que vous avez créé votre structure de liste et l'avez remplie avec des données, pour obtenir des valeurs de la liste, vous auriez quelque chose comme:value = ds[| 5];
Ce qui précède obtiendra la valeur à partir de la position 5 (le sixième indice, puisque les listes commencent à 0) et le stocker dans une variable. Notez que si vous utilisez une expression pour ajouter une référence à un index ayant déjà une valeur, la valeur précédente sera remplacée plutôt qu'un index supplémentaire ajouté à la liste. Pour ajouter d'autres entrées, vous devez connaître la taille de ds_list et les ajouter à la fin. Il convient également de noter que vous pouvez définir un index de liste supérieur à la taille de la liste référencée, ce qui permet de définir cette valeur, d'étendre la liste en même temps et d'initialiser toutes les positions dans la liste. à l'index donné comme 0.
La syntaxe des cartes est la suivante:map_index[? key]
Après avoir créé votre carte avec ds_map_create(), vous utiliseriez l'index de carte que vous avez stocké dans une variable pour le référencer, la valeur "clé" étant la clé de la carte à définir ou à obtenir. Par exemple, le code suivant crée une carte, puis ajoute quelques entrées à l'aide de cette syntaxe:ds = ds_map_create();
ds[? "Name"] = "Hamish";
ds[? "Company"] = "MacSeweeny Games";
ds[? "Game"] = "Catch The Haggis";
Une fois que vous avez créé la structure de votre carte et l'avez remplie avec des données, pour obtenir des valeurs à partir d'une clé de carte spécifique, vous auriez quelque chose comme:value = ds[? "Name"];
Ce qui précède obtiendra la valeur à partir de la clé "Name" et la stockera dans une variable. Notez que si la carte contient déjà la même valeur de clé que vous essayez d'ajouter, elle ne créera pas de clé dupliquée avec la nouvelle valeur, mais la valeur précédente sera remplacée.
La syntaxe pour les grilles est:grid_index[# xpos, ypos]
Après avoir créé votre grille avec le ds_grid_create() fonction, vous utiliserez l'index de grille que vous avez stocké dans une variable pour le référencer, avec le "xpos" et "ypos" étant la position dans la grille pour obtenir ou définir une valeur. Par exemple, le code suivant crée une grille, l'efface à 0, puis lui ajoute quelques entrées:ds = ds_grid_create();
ds_grid_clear(ds, 0);
var gw = ds_grid_width(ds) - 1;
var gh = ds_grid_height(ds) - 1;
repeat(10)
{
var xx = irandom(gw);
var yy = irandom(gh);
if ds[# xx, yy] == 0 ds[# xx, yy] = 1;
}
Une fois que vous avez créé votre structure de grille et l'avez remplie avec des données, pour obtenir des valeurs à partir d'une position de grille spécifique, vous auriez quelque chose comme:value = ds[# mouse_x div 16, mouse_y div 16];
Ce qui précède obtiendra la valeur du ds_grid donné en fonction de la position de la souris (divisée par la largeur de la "cellule" dans la pièce pour obtenir l'emplacement correct).
Les tableaux ont également leurs propres accesseurs qui fonctionnent de la même manière que ceux listés ci-dessus pour les structures de données. Cependant, les accesseurs de tableau ont une propriété intéressante, c'est-à-dire vous permettre de modifier un tableau à partir d'un script sans avoir à le copier. Lorsque vous passez un tableau dans un script, il est passé par référence, ce qui signifie que le tableau lui-même n'est pas copié dans le script mais qu'il est simplement référencé pour obtenir les données. Normalement, si vous avez besoin de changer le tableau, il sera copié dans le script et vous devrez alors passer le tableau copié pour que le tableau original soit mis à jour. Cela peut entraîner des coûts de traitement élevés et vous pouvez utiliser l'accesseur à la place, car cela modifiera directement le tableau d'origine sans qu'il soit nécessaire de le copier. Vous pouvez voir comment cela fonctionne dans les exemples ci-dessous.
La syntaxe des tableaux est la suivante:
array[@ xpos]
array[@ xpos, ypos]
Après avoir créé votre tableau dans une instance, vous pouvez ensuite le passer à un script par référence et utiliser l'accesseur @ pour le changer directement. Par exemple, vous créez le tableau et appelez le script comme ceci:
array[99] = 0;
scr_Array_Populate(array);
Le script lui-même aurait quelque chose comme ça:
var a = argument0; var i = 0; repeat(25)
{
i = irandom(99);
while (a[i] != 0)
{
i = irandom(99);
}
a[@ i] = 100;
}
Tout ce que fait ce script est de sélectionner 25 positions aléatoires dans le tableau et de définir la valeur de la position du tableau à 100.