AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -28%
-28% Machine à café avec broyeur ...
Voir le deal
229.99 €

 

 [RÉSOLU] Script return an array.

Aller en bas 
3 participants
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[RÉSOLU] Script return an array. Empty
MessageSujet: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 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
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 17 Sep 2011 - 19:23

Utilise des ds_list a la place de tes arrays Wink
C'est plus rapide, plus propre, et elles ont un id, donc possibilité de le retourner.
Revenir en haut Aller en bas
Morwenn
Très bonne participation
Morwenn


Messages : 151
Projet Actuel : Icare

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 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 ?
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 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.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 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.
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 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.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 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 Wink
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptySam 17 Sep 2011 - 22:49

Ça va tu a réussi à déchiffrer ce que j'ai voulus demander Very Happy

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.

albinoblacksheep (juste parce qu'il est hyper kawaii)
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. EmptyDim 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


albinoblacksheep albinoblacksheep albinoblacksheep
Revenir en haut Aller en bas
Contenu sponsorisé





[RÉSOLU] Script return an array. Empty
MessageSujet: Re: [RÉSOLU] Script return an array.   [RÉSOLU] Script return an array. Empty

Revenir en haut Aller en bas
 
[RÉSOLU] Script return an array.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [RÉSOLU] Ds_List_Size return 43.
» [RÉSOLU] collision_line() return the POS of the collision.
» remplir tableau/array rapidement [RESOLU]
» [Résolu]Bug sur script unpack
» Script indexation [Résolu]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: