Problème création de variable javascript avec runtimeScene

Je tentent de créer une variable dans la scène courante au sein d’un événement en javascript.
Je créer d’abord une varible comme suit :
runtimeScene.getVariables().add(“newvar”,“du texte”);

Dans le débugger la variable est créée sans type et avec une valeur null:
“newvar”:{
“type”:undefined
“value”:NULL
}

lorsque je tente de tester si ma variable existe avec runtimeScene.getVariables().has(“newvar”);
La commande plante

Comment créer des variables pour une scène à la volée en javascript ?

Set value of scene variable:
runtimeScene.getVariables().get(“sceneVarName”).setNumber(100);
runtimeScene.getVariables().get(“sceneVarName”).setString(“new text”);

Set value of global variable:
runtimeScene.getGame().getVariables().get(“globalVarName”).setNumber(100);
runtimeScene.getGame().getVariables().get(“globalVarName”).setString(“new text”);

Set value of object variable:
var objects = runtimeScene.getObjects(“objectName”); //return an array of all instances
objects[0].getVariables().get(“objectVariableName”).setNumber(100); //set number value of first instance
objects[0].getVariables().get(“objectVariableName”).setString(“new text”); //set text value of first instance

Thanks !
And for array it seems its not the same for the creation. I make a simple array with pushvalue but too make an array of array i have an issue i dont find how can i make it.

I think i find a method like that but i dont know if it a good practice :
var sv = runtimeScene.getVariables();
sv.get(“sub”).pushValue(“pomme”);
sv.get(“sub”).pushValue(“poire”);
sv.get(“sub”).pushValue(“cerise”);

sv.get(“Board”).pushVariableCopy(sv.get(“sub”));
sv.get(“Board”).pushVariableCopy(sv.get(“sub”));
sv.get(“Board”).pushVariableCopy(sv.get(“sub”));
sv.get(“Board”).getChildAt(1).getChildAt(1).setString(“Citron”);

Tout comme dans les evenements GDevelop de base, les variables se créents elles memes quand tu essaie d’en obtenir une qui n’existe pas encore. La fonction add est pensée pour une optimisation interne uniquement, pas pour créer de nouvelles variables.

Ca marche comme ca :person_shrugging: Sinon tu peux aussi utiliser une boucle for pour repeter une action un certain nombre de fois, et tu n’est pas obligé d’utiliser le VariableContainer (ou une variable contenue dedans) a chaque fois:

const mesFruits = new gdjs.Variable().fromJSObject(["pomme", "poire", "cerise"]);
const board = runtimeScene.getVariables().get("Board");

for(let i = 0; i < 3; i++) {
  board.pushVariableCopy(mesFruits);
}

board.getChildAt(1).getChildAt(1).setString("Citron");
1 Like

Super tout ça fonctionne très bien. Merci pour l’aide

1 Like