[Résolu] - [Game Maker] Obtenir l'ID d'une instance créée?

Démarré par Ynanome, 19 Février 2009 à 13:34

0 Membres et 1 Invité sur ce sujet

    Je ne suis pas encore habitué à ce merveilleux logiciel qu'est Game Maker, donc j'aimerais savoir comment obtenir l'ID d'une instance créée?

    En fait, je souhaiterais modifier une variable de cette instance. Habituellement, je mets quelque chose du genre:
(100001).valeur = 0;
    Mais cela requiert de connaître l'ID de l'instance. Or, comme cette instance est créée en cours de jeu, je ne peux pas connaître son ID.

    Quelqu'un saurait-il donc comment je pourrais faire ça? :)

19 Février 2009 à 17:36 #1 Dernière édition: 19 Février 2009 à 17:44 par Maxs
Si tu veux modifier la variable d'un objet tu peux le faire simplement comme ça : objet.variable = valeur;

Maintenant si l'objet existe plusieurs fois et que tu veux que seulement un de ceux ci modifie sa variable, il te faut connaitre sa position et tu pourra alors utilisé la fonction instance_position :

instance_position(x,y,obj)
Retourne l'ID de l'instance de type obj à la position (x,y).
Lorsque plusieurs instances sont à la même position, seule la première est retournée.
obj peut être un objet ou le mot-clé all.
Si celui n'existe pas, l'objet spécial noone sera retourné.


Voila, j'espère t'avoir aidé. ;)

EDIT :

En fait le plus simple quand tu crée l'instance via un code c'est de faire comme ça : :P

variable_a = instance_create(x,y,objet);
variable_a.variable_de_a = valeur;


La fonction instance_create retourne l'ID de ce qu'elle crée. ^_^

instance_create(x,y,obj) Crée une instance de obj à la position (x,y). La fonction retourne l'ID de la nouvelle instance.
SQE developer

    Merci, ça m'aide beaucoup :). En effet, cet objet est en plusieurs exemplaires donc je ne peux faire objet.valeur = 0, autrement ça le fait pour tous les objets^^. Mais ce que tu as dit à la fin m'aide, je ne savais pas que la fonction retournait l'id de l'instance, c'est super pratique^^.

Dis-toi que presque la plupart des fonctions de Game Maker renvoit quelque chose, en partant de la valeur booléenne, passant par l'ID,...

    Je reposte dans ce topic pour une autre question: comment ordonnancer ses actions sous game maker?

     J'ai un évènement qui modifie une variable "valeur" d'une instance A, puis qui supprime cette instance à la suite. Seulement voilà, je voudrais qu'il y ait quelques steps d'écart entre ces deux actions. En effet, d'autres actions sont censées se dérouler lorsque la "valeur" de l'instance A est modifiée, mais comme l'instance est détruite juste après, ces actions ne peuvent pas avoir lieu :mellow:.

    Bref, comment résoudre ce problème? J'ai essayé avec une alarme, mais bizarrement ça ne marche pas (durant le temps d'attente d'une alarme les autres actions continuent à être effectuées, j'espère?). Et d'ailleurs, tant que j'y suis, je me pose une question à propos des alarmes: lorsque le compteur atteint 0, l'alarme effectue une seule fois l'action comprise dans l'évènement alarme, ou il y a une instruction nécessaire pour arrêter l'alarme? :)

Citation de: Ynanome le 21 Février 2009 à 14:17
    Je reposte dans ce topic pour une autre question: comment ordonnancer ses actions sous game maker?

     J'ai un évènement qui modifie une variable "valeur" d'une instance A, puis qui supprime cette instance à la suite. Seulement voilà, je voudrais qu'il y ait quelques steps d'écart entre ces deux actions. En effet, d'autres actions sont censées se dérouler lorsque la "valeur" de l'instance A est modifiée, mais comme l'instance est détruite juste après, ces actions ne peuvent pas avoir lieu :mellow:.
J'aurais dit Alarm après avoir lu ça, mais vu que ça marche pas.
Citation de: Ynanome le 21 Février 2009 à 14:17Bref, comment résoudre ce problème? J'ai essayé avec une alarme, mais bizarrement ça ne marche pas (durant le temps d'attente d'une alarme les autres actions continuent à être effectuées, j'espère?).
Si c'est ça le problème, tu peux faire en sorte qu'il y ait une variable qui autorise ou pas les actions, genre si elle est true, les actions peuvent s'effectuer, sinon ben non.
Ainsi, tu auras un code de ce style :
id_instance.autorisation_action = true;
id_instance.alarm[0] = 30; (nombre de frames de l'attente)
/*Code des actions*/
Citation de: Ynanome le 21 Février 2009 à 14:17Et d'ailleurs, tant que j'y suis, je me pose une question à propos des alarmes: lorsque le compteur atteint 0, l'alarme effectue une seule fois l'action comprise dans l'évènement alarme, ou il y a une instruction nécessaire pour arrêter l'alarme? :)
A 0, elle effectue une fois les actions qu'elle a puis attend qu'elle soit relancé.

21 Février 2009 à 14:35 #6 Dernière édition: 29 Mars 2009 à 17:12 par Ynanome
    Oui effectivement, en mettant une variable autorisant ou non l'action, ça marche. Visiblement le problème venait d'une autre instance qui modifiait elle aussi la valeur de l'instance A.
    C'était assez évident, mais j'étais persuadé que le problème venait du fait que j'utilisais mal les alarmes, comme je n'en ai pas l'habitude :). Et merci d'avoir répondu à ma question sur les alarmes^^.



    EDIT: Une nouvelle question sur Game Maker à propos d'un problème qui me gène beaucoup.
Je souhaiterais affecter à une variable d'un objet A la valeur d'une variable d'un objet B, et ce, par une chaîne de caractère. Comme ce n'est pas très explicite, je m'explique :P :

    Il existe la fonction variable_global_get(str) qui renvoie la valeur de la variable définie par la chaîne de caractère entre parenthèses. Par exemple, si global.Nb_de_vies=3 et variable_a_afficher= 'Nb_de_vies'

valeur=variable_global_get(variable_a_afficher);

--> valeur prendra la valeur 3.

Il existe la même fonction, mais pour une variable locale à l'objet (variable_local_get).
Mais moi je voudrais que la fonction renvoie la variable locale d'un autre objet :P, dont l'ID est elle-même contenue dans une chaîne de caractères.

J'ai donc essayé, par exemple:

valeur= variable_local_get(instance_concernee+variable_a_afficher);

Où ici, instance_concernee aurait par exemple comme valeur "(100002)." et variable_a_afficher comme valeur "Niveau". "variable_local_get(instance_concernee+variable_a_afficher)" devrait donc me renvoyer la valeur de (100002).Niveau, mais ça ne marche pas :mellow:.

En fait, je ne suis même pas sûr que la fonction variable_local_get puisse renvoyer la valeur d'une variable locale d'une autre instance...   Si vous connaissez la solution de ce problème ou la fonction qui permet de faire ça, dites-le, ça m'aidera beaucoup :).

(Je me suis permis de renommer le topic, afin qu'il puisse servir à tout le monde :) ).