Appeler une variable à l'aide d'une autre variable.

Salut, je sais pas si la question a déjà était posé, je me demande si c’est possible :

J’aimerai appeler une variable à l’aide d’une autre variable. Voici mon exemple :
GlobalVariable(GlobalVariable(Joueur).Objet)

Ca me permettrai d’appeller la même variable globale pour tous les joueurs.

J’ai une autre question, je suis habitué à travailler avec des tables (Array) qui permettent facilement ce genre de manipulation. Est-ce que ce genre d’objet existe? J’ai du mal avec les structures, ça me semble beaucoup moins flexible.

Hello !! Pour ta question oui c’est possible, je developperai plus bas.

Pas d’array dans gdevelop, ni de base s de donnes externes a ma grande peine, néanmoins je crois que qqn a rédigé un topic sur le wiki assez détaille sur les variables structures pour les utiliser comme un array.

Pour ton affaire il faut utiliser des les fonctions de types string/toString. Je suis sur mon téléphone(donc je peux pas tester ni faire de copier/coller) mais la syntaxe devrait ressembler à qqch comme : GlobalVariable(GlobalVariableString(Joueur).Objet)
Il faudra peut-être passer par des concaténations(la aussi, article dispo sur le wiki).

Merci pour ta réponse Kink, j’ai pourtant essayé cette syntaxe et ça n’a pas marché, du coup j’ai fait 30000 lignes de codes… J’ai 30 variables par joueurs, que j’ai rentrés à la main (ben oui on peut pas copié collé les structures…), si je pouvais faire ça ce serait chouette et ça simplifierai tout.

Je vais chercher dans le Wiki car je n’avais rien trouvé, ça va m’obliger à tout reprendre mais si ça marche, ça change tout!

J’ai trouvé ça, je vais essayer :

[i][b]Déclarer des structures

GDevelop supporte l’utilisation de structures, qui sont des variables ne possèdant pas de valeur unique, mais contenant à la place des variables, appellées variables enfants. ( Ces variables enfants pouvant elles même être des structures, ou bien être simplement des variables normales. )

Pour ajouter une variable enfant, faites un clic droit sur une variable existante, et choisissez Ajouter une variable enfant.
La variable est transformée en une structure au besoin, et un nouvel enfant est ajouté.

Dans les évènements, vous pouvez accéder aux variables enfant avec cette syntaxe : Variable.VariableEnfant.
Vous pouvez aussi utiliser une expression pour désigner le nom de la variable enfant : Variable.[“Enfant”+ToString(Variable(Index))]. Dans cet exemple, on utilise une troisième variable Index, qui contient un nombre. Ceci permet d’accéder aux enfants nommés Enfant0, Enfant1, Enfant2… et de simuler par exemple un tableau indexé par des chiffres.
[/b][/i]

Bon je comprend ce que fait mal, j’ai fait un petit texte ou j’affiche ça :

GlobalVariableString(Joueur)+GlobalVariableString([“Joueur”+ToString(GlobalVariable(Joueur))].Nom)

J’obtiens ça :
1

Alors que si je tape :
GlobalVariableString(Joueur)+GlobalVariableString(Joueur1.Nom)

J’obtiens ça :
1Perceval

Ma Structure globale :

On est proche de ce que tu cherches, il faut soit récupérer les valeurs de variables avec variablestring() ou ToStringVariable(). Après gares aux variables que tu attaques : les noms de fonctions changent suivant qu’on parle variable d’objet, variable de scène ou variable globale (ci dessus c’est la syntaxe pour les car de scène).

Regarde l’article sur la concaténation ! C’est moi l’avait rédiger il explique tous les cas de figures et de syntaxes si je me souviens bien.

Perso j’utilise des structures/enfants avec un suffixe incrémenté pour justement m’affranchir du problème de valeurs/identifiants uniques. C’est du boulot aussi, mais je t’invite a faire des tests dans tous les sens avant de réaliser qqch dans ton jeu, il y de multiples façons de faire.

J’apprécie vraiment ton soutiens, je sais maintenant que ce n’est qu’un problème de syntaxe, je suis prêt à repenser complétement mon projet s’il le faut. J’ai édité mon message ci-dessus à l’instant où tu répondais. Je vais chercher ton explication sur la concaténation.

J’espère que ça avance, tu as cb de variable structures “joueur” parent ?

Salut, ça ne marche pas, est-ce parce que j’essaie d’afficher l’enfant d’un enfant?

J’ai tenter la syntaxe suivante en passant par une variable de scène sans plus de résultat

Bon ça peut être confus mais Joueur c’est ma variable de scène, et la variable global Joueur c’est le numéro du joueur de 1 à 6:
Joueur=“Joueur”+GlobalVariableString(Joueur)

Puis j’affiche un texte comme ci dessous :

“Joueur”+ToString(GlobalVariable(Joueur))+" : "+GlobalVariableString(VariableString(Joueur).Nom)

J’obtiens ça :

Joueur1 :

Et c’est tout pas la valeur dans Joueur1.Nom

wiki.compilgames.net/doku.ph … renotation

J’ai suivi les recommandation ci-dessus, là je comprend plus, j’ai vraiment pas l’impression d’avoir fait n’importe quoi, mais ça ne marche pas.

Hum pas évidant sans voir tes variables structures, tu peux faire un gdg “light” qui ne devoile rien de ton projet pour que je te file un coup de patte si tu veux ? Avec juste tes variables globales/scenes/objets + leurs valeurs et je te ferai un exemple dans un champ texte.

Salut, pas évident de t’envoyer une version “light” mais je peux te l’envoyer en priver sur dropbox, au stade de l’avancement y’a pas non plus beaucoup de secrets.

Bon après plusieurs essais, je suis quasiment sure que ça ne vient pas de la syntaxe, simplement on peut indexer les enfants mais pas les parents, en tout cas c’est l’impression que j’ai.

Maintenant je me pose d’autres questions mais qui finalement sont en lien avec ça. J’ai pris la programmation en HTML 5 et je me rend compte qu’elle est pas mal castrée. Il y a beaucoup de “constantes” (comme des variables mais dont le texte ne varie pas), pour celles-ci un fichier type XML serait parfait cepandant il semble que ce format n’est pas exploité par la version HTML 5. Est-il possible de créer un fichier éditable pour stocker un certain nombre de valeur de manière structurée? Quelle serait la meilleur piste JSon? La fonction écrire/lire une valeur dans un fichier (qui me semble relativement proche du XML dans un sens)?

Bon ok, je vais me répondre, je découvre aussi, en html 5 on ne peut pas créer de fichier XML, enfin si on peut mais directement par le programme (en faisant écrire/lire une valeur). Moi j’aurai aimé faire un fichier (XML ou autre d’ailleurs) avec toutes mes variables que le programme serait allé pioché. En html 5 on ne peut pas apparement.

Pour les variables indexées le truc me rend fou, si quelqu’un avait un fichier exemple qui fonctionne je lui serait grée.J’ai crée un petit fichier exemple :

On m’a dit de faire cette syntaxe :
Variable.[“Enfant”+ToString(Variable(Index))]

Voilà ce que je fais :

Et ce que j’obtiens :

PS : Pour être sur j’ai compilé et exporté le fichier et j’obtiens la même chose.

Tu n’as pas essayé avec ce que j’ai proposer en MP ? ça devrait fonctionner avec un niveau de plus dans tes variables structures et la syntaxe que je t’ai donné.

Tu m’as envoyé ça :
GlobalVariableString(g_inventaire.inv_slots[“slot_”+ToString(HUD_inv_quantite.Variable(id))].id)

J’imagine que ça pointe sur :

g_inventaire.inv_slots.slot1.id

Si la variable local id = 1

Ou alors c’est peut être là que j’ai pas compris et que ça coince.

Oui c’est bien là que ça coince moi je faisais ça :

GlobalVariableString(g_inventaire.inv_slots.[“slot_”+ToString(HUD_inv_quantite.Variable(id))].id)

Je sais pas si tu vois mais je mettais un point alors que les crochets doivent être directement derrière le parent de la variable, c’est vicieux quand même car dans un sens c’est pas très logique. M’enfin.

Merci pour ton aide.

C’est soit “.” soit “[”, jamais les deux en même temps. Le point permet d’accéder à un enfant avec une chaîne constante (le nom de l’enfant est entré directement, sans guillemets et sans expression texte possible) alors que [ ] permet d’utiliser une expression texte pour récupérer un enfant.

Merci Victor, je suis peut être le seul mais j’ai vraiment du mal avec cette syntaxe, la mise au point est salutaire. L’air de rien c’est le genre de fonctions indispensables dès qu’on veut faire un projet un peu complexe.

Oui je plussoie, je me suis bcp arraché les dents (et perdu de cheveux, ou l’inverse au choix) sur cette syntaxe, pourtant je suis très familier de nombreux langages de script et orientés objets. Et même encore aujourd’hui j’ai des lacunes (ou alors c’est juste des trucs impossibles à faire) avec cette syntaxe sur les concaténations (l’exemple du cas qu’on a eu par MP avec Bourrindesbois est très parlant).

Pourtant c’est la même syntaxe que pour les tableaux et les membres d’objet dans n’importe quel langage…

Victor, tu as raison dans le sens ou c’est souvent ce genre de syntaxe, mais le problème c’est que toutes les syntaxes que j’ai entrée semblaient Ok pour Gdevelop. De là on peut très facilement se gourrer. Moi j’avais l’habitudes des Arrays dans Construct par exemple ça n’avait rien à voir.

PS : Maintenant que j’ai compris pas de soucis, je pense que ça pourrait -peut être- être automatisé dans l’éditeur, ce sont des notions vachement compliquées pour les néophytes et pourtant indispensables.

+1 @BourrinDesBois, c’est sans doute le plus gros manque de Gdevelop par rapport à son slogan “sans programmation”, on peut rester dans la logique comme avec tous les events, c’est super, mais des tableaux (ou mieux une base de données simple et minimale comme je l’ai déjà évoqué) seraient le top !

J’ai du bosser un mois sur un système qui ressemble à une base données articuler entre des variables structures globales, de scènes et d’objets : le système fonctionne mais est très rigide, et n’est pas “transposable” sur un autre projet, pourtant je ne vois pas comme faire autrement pour réaliser un inventaire avec des centaines d’objets possiblement présents et tous avec des dizaines de paramètres. Perso je m’en serais bien passé, j’aurais préféré pouvoir taper directement le XML…

2 axes d’évolutions pour moi : une UI user friendly pour la rédaction de la syntaxe tordue des variables structures, et possibilité de gérer plus facilement les structures…