begin process at 2012 05 27 20:10:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

SharedObject : problème avec le passage de variable par référence


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SharedObject : problème avec le passage de variable par référence

samedi 12 décembre 2009 à 22:19:17 | SharedObject : problème avec le passage de variable par référence

Ranzac

Bonjour le forum,

J'ai un petit soucis avec Flash 8 dont je n'ai pas trouvé la solution sur internet...

Je programme le système de sauvegardes d'un jeu. Je souhaite créer 3 sauvegardes possibles : j'ai donc créé un sharedObject qui est un tableau d'enregistrements, chaque ligne contenant les données d'une sauvegarde.
Code ActionScript :
_root.sauvegarde.data.Jeu = new Array(4);
for(i=1;i<4;i++)
{_root.sauvegarde.data.Jeu[i]=new Object;}

(en fait le tableau fait 4 lignes parce que je n'utilise pas la ligne zéro, pour une raison de clarté de numérotation)

Donc, quand je sauvegarde sur la piste 2, je fais tout simplement :
Code ActionScript :
_root.sauvegarde.data.Jeu[2]=_root.Jeu;
_root.sauvegarde.flush();

(_root.Jeu est l'enregistrement de toutes les variables qui stockent la progression dans le jeu, il contient donc des données de plusieurs sortes : Number, String, Array)

Si c'est la première fois que je sauvegarde, on obtiendra, pour chaque variable, sur les différentes lignes :
Code ActionScript :
undefined
"valeur 2"
undefined

Pour l'instant tout marche parfaitement.

Si ensuite quelques temps plus tard je sauvegarde sur la piste 3, même manipulation :
Code ActionScript :
_root.sauvegarde.data.Jeu[3]=_root.Jeu;
_root.sauvegarde.flush();


Mais là, ô stupeur : toutes les valeurs de la 2ème sauvegarde ont été changées. Pour chaque objet, on obtient sur les différentes lignes :
Code ActionScript :
undefined
"valeur 3"
"valeur 3"


En fait le code su comporte comme si les variables des objets sauvegardés étaient passées par référence et non par valeur : toute modification ultérieure d'une variable du jeu affecte toutes les sauvegardes (toutes les lignes de l'Array sharedObject).

Je n'arrive pas à passer ces variables par valeur... Comment faire ? Merci pour votre aide !
samedi 12 décembre 2009 à 23:44:23 | Re : SharedObject : problème avec le passage de variable par référence

Ranzac

Bon, je crois que j'ai trouvé ma réponse en fouillant un peu... Avec actionscript les types complexes comme les objets (classe Object, appelés "enregistrements" dans ma folle jeunesse) sont forcément passés par référence, et jamais par valeur.

D'après ce que j'ai compris, on ne peut donc pas initialiser un objet indépendant avec les valeurs d'un autre par une seule ligne de code : il faut le faire variable par variable.

C'est triste, mais ainsi va la dure loi d'actionscript
lundi 14 décembre 2009 à 10:23:08 | Re : SharedObject : problème avec le passage de variable par référence

bali_balo

Réponse acceptée !

Salut,
je dirais même : ainsi va la dure loi de la programmation objet !
C'est pour cela que j'implémente toujours ces deux méthodes à une classe : MaClasse.copy( o:MaClasse):void et MaClasse.clone() :MaClasse
La première récupère toute les propriétés de l'objet 'o' et l'assigne à l'objet courant. Et la seconde renvoie une copie de l'objet courant.
Tu peux aussi créer des méthodes qui "serialize" ou "deserialize" ton objet.

bali_balo....=]
lundi 14 décembre 2009 à 21:36:23 | Re : SharedObject : problème avec le passage de variable par référence

Ranzac

Merci pour les éclaircissements ! Mais comme je ne suis pas un pro de la programmation orientée objet, j'en profite pour abuser : tes classes "copie" et "clone" sont codées comment ? "A la barbare" en listant à la main tous les attributs de l'objet à copier, ou il y a une astuce de code pour faire ça plus rapidement ?

Tu peux aussi créer des méthodes qui "serialize" ou "deserialize" ton objet.


Et là du coup j'ai pas compris du tout, mais ça a l'air super intéressant, alors je veux bien une petite explication :)


Cette discussion est classée dans : code, valeur, jeu, sauvegarde, root


Répondre à ce message

Sujets en rapport avec ce message

jeu > rejouer... [ par reperweb ] Bonjour, voilà j'ai développé un petit jeu de grattage, je me suis fort inspiré de ce tutoriel : http://www.flashkod.com/code.aspx?id=13568 tout marc adder 1 a une valeur [ par fg000 ] Bjour,Je voudrait savoir comment on fait pour addé 1 à une variableen cliquant sur un bouton, pour l'instant j'ai sa:on (release) {_root.hits = _root. Pb d'affectation de valeur [ par Brendarth ] Bonjour à tous ! Premier message, donc je vais essayé d'être clair concernant mon problème. J'ai un fichier XML avec des noms rataché à des référence Angle ; radian ; ... [ par Blacknight91titi ] SalutJe dévellope un projet que je mettrait a dispo lorsqu'il sera fini Voiçi mon problème :Je dipose d'un poisson dans un aquariumJe veu faire une so rere:Naixn voila mon code [ par liolo ] onClipEvent (enterFrame) { if (this.hitTest(_root.moi)) { _root.moi._y = _root.moi._y+5; } if (this.hitTest(_root.moi)) { gotoA Associer du son aux actions (click, hitTest...) [ par joe666 ] Salut à tous les pros de ce site !Je vs ai déjà ecrit il y a qq jours car je realise un petit jeu flash et au fur et à mesure que j'avance j'ai plein loadMovie et evenements ca marche comment ? [ par shivan ] salut !j'ai une fonction qui crée dynamiquement des clips, et qui met une image précise dans ce clip. enfin le clip redéfinie les evenements onMouseDo Optimisation de code... [ par yoyesman ] Bonjour,J'ai créé un script qui marche bien, cependant il n'est pas du tout optimisé !!!Il me prend tout mon CPU et je n'arrive pas à lire la séquence [MX] probleme au niveau du code (dessin en AS) [ par ychaouche ] Salut à tous,J'apprends à dessiner en AS et l'exemple que je voulais programmer était de dessiner une grille de 8 case.Bon j'ai écrit un faux code et Problème de variables [ par XF007 ] Bonjour.Voila, j'ai un petit script qui fait un loadvariables :loadVariables("###url###", _root);ca me sort un resultat de ce type :


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales