|
| [RÉSOLU] Script return an array. | |
| | Auteur | Message |
---|
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 19:21 | |
| Bonjour, j'aurais besoin de retourner un tableau d'une dimension à partir d'un script. Mais apparemment ce n’est pas possible, il y a t'il une solution avec un peut de ruse ou de tricherie? Voilà ce que j'ai testé. - Code:
-
mon_array[0] = 'ma valeur numero 1'; mon_array[1] = 'ma valeur numero 2'; return mon_array;
- Code:
-
variable_local_array_set(mon_array, 0, 'ma valeur numero 1'); variable_local_array_set(mon_array, 1, 'ma valeur numero 2'); return mon_array;
Et aucun des deux ne fonctionne, cela me dit que mon_array[1] n'est pas un tableau valide. J'ai fouillé par ici Manuel : Variables et Fonctions Diverses mais je n'ai pas vue quelque chose qui pourrais m’intéresser. Si quelqu'un a une solution je prends volontiers.
Dernière édition par Caly le Sam 17 Sep 2011 - 22:30, édité 2 fois |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 19:23 | |
| Utilise des ds_list a la place de tes arrays C'est plus rapide, plus propre, et elles ont un id, donc possibilité de le retourner. |
| | | Morwenn Très bonne participation
Messages : 151 Projet Actuel : Icare
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 19:41 | |
| Le seul inconvénient des listes, c'est que la syntaxe est assez lourde pour les manipuler. Mais sinon, ça reste plus efficace, et le fait qu'elles aient une ID permet en effet de détourner certains problèmes de Game Maker. Fin bon, comme je le dis souvent, à quand une version de Game Maker avec des tableaux vraiment pratiques et efficaces ? |
| | | Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 20:56 | |
| Merci pour les réponses, j'ai regardé la doc sur GameMaker.info mais il n'y a pas d'exemple (ou je ne l'ai pas trouvé). Voici ce que j'ai fait : Script appelé dans le step d'une instance. - Code:
-
[...] LDV = func_collision_distance(obj_hero.x, obj_hero.y, mouse_x, mouse_y, all.solid); if (LDV != noone) { with (obj_block_magique) instance_destroy(); instance_create(LDV[0],LDV[1],obj_explosion); } else instance_create(mouse_x,mouse_y,obj_block_magique); [...]
Fonction : func_collision_distance(); : - Code:
-
//func_collision_distance(x_depart , y_depart , x_arriver, y_arriver, bloquant); var objAtester, x_depart, y_depart, x_arrive, y_arrive, bloquant; x_depart = argument0; y_depart = argument1; x_arrive = argument2; y_arrive = argument3; bloquant = argument4;
if( collision_line(x_depart,y_depart,x_arrive,y_arrive,bloquant,true,true)) { var dist_impact, precision, long_max, dir; dist_impact=0; precision=2; long_max= floor(point_distance(x_depart, y_depart, x_arrive, y_arrive)); dir= point_direction(x_depart, y_depart, x_arrive, y_arrive); while (precision>1 or dist_impact>long_max) { while !collision_line(x_depart, y_depart,floor(x_depart+lengthdir_x(dist_impact,dir)),floor(y_depart+lengthdir_y(dist_impact,dir)),bloquant,true,true) && dist_impact<long_max dist_impact += precision; dist_impact -= precision; precision /= 2; } dist_final = ds_list_create(); dist_final = ds_list_add(0, floor(x_depart+lengthdir_x(dist_impact,dir))); dist_final = ds_list_add(1, floor(y_depart+lengthdir_y(dist_impact,dir))); return dist_final; } else return noone;
LDV[0] et LVD[1] me retourne une erreur, juste une histoire de syntaxe je suppose mais impossible de poser la main dessus. |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 21:07 | |
| En fait les ds_list c'est un peu les vector du c++, mais en moins bien.
tu crée ta liste : array = ds_list_create()
tu ajoute un élément : ds_list_add(array, valeur) c'est l'équivalent de array.push_back(valeur) en c++
et pour récupérer un élément tu fait ds_list_find_value(array, case) équivalent a array[case]
Bon c'est pas super en utilisation mais ça reste assez puissant. Si ça correspond pas a tes besoin y a les ds_map qui sont des couples clé valeurs et qui s'utilisent a peu pres de la meme maniere. |
| | | Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 22:29 | |
| Encore une fois merci onilink_.
Je commence à prendre l'habitude de l'écrire cette phrase. Ton explication était nickel. Juste une dernière petite question: Apres avoir récupéré une liste par le biais d'un script, si je fait un "ds_list_destroy(id);" ça me détruit la liste récupéré (par le return) mais es ce que le pc/mac garde la liste qui à était créée dans la fonction ou elle est détruite avec la liste récupéré? (pas sur d'avoir était clair sur ce coup là).
Si la liste créée dans la fonction appelée n'est pas détruite de la RAM est il possible de le faire autrement, afin d'évité une "fuite mémoire" inutile pour les vielles config?
Nb: J'ai voulus me mettre au GML car c'est plus rapide que le C à coder mais je me rend compte que c'est un peut ****** avec les contraintes à gogo qu'on chope à droite et à gauche... mais bon on reste quand même sur quelque chose de vraiment plus rapide. |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 22:38 | |
| Yep ça détruit bien ta liste. En fait dans GM a défaut de pointeur on gère juste des id, et donc un la valeur d'un id peut être considérée comme un pointeur global, et tu pourras y accéder depuis n'importe quelle instance. (dommage qu'on puisse pas récupérer les id de toutes les listes crées par contre, via une fonction) De plus, quoi qu'il arrive ne t'en fait pas. GM s'occupe de libérer la mémoire utilisée une fois l'application terminée |
| | | Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [RÉSOLU] Script return an array. Sam 17 Sep 2011 - 22:49 | |
| Ça va tu a réussi à déchiffrer ce que j'ai voulus demander Bon, bha, l'optimisation de la première partie de mon premier sort est finis (ça fait beaucoup de "premier" ça motive pas :s) le tout en grande partie grâce à toi et à ton aide, je te remercie énormément pour ton aide, patience et pédagogie, ça fait plaisir d'avoir du soutien quand on se lance dans un langage nouveau. Merci encore, c'est sympas de ta part. (juste parce qu'il est hyper kawaii) |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RÉSOLU] Script return an array. Dim 18 Sep 2011 - 11:05 | |
| A ton service :p Pis c'est rare d'avoir des personnes qui comprennent ce qu'on leur dit si vite, c'est un plaisir que de répondre a tes questions :p |
| | | Contenu sponsorisé
| Sujet: Re: [RÉSOLU] Script return an array. | |
| |
| | | | [RÉSOLU] Script return an array. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |