AS3 - passa ge de paramètre Parent / Enfant ??

[Résolu]
Signaler
Messages postés
34
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2009
-
Messages postés
34
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2009
-
Bonjour à tous!

Je suis en train de coder un petit jeu tout con, histoire de mettre les mains dans l'as3... J'ai donc créé des classes associées à des MovieClip, etc, et tout fonctionne à peu près bien, sauf que...

Dans ma classe principale j'ai donc un tableau initialisé par le constructeur et qui contient la configuration initiale de la map. je crée ensuite le jeu en lui passant en paramètre le tableau pour qu'il construise la map et modifie certaines cases en fonction du nombre, mais lorsque je supprime l'instance de l'objet jeu pour en créer un nouveau, je me rends compte que mon tableau contenant les paramètres initiaux a été modifié...
J'ai dû rater quelque chose quelque part, est-ce normal? comment faire pour ne pas qu'il modifie le tableau original?

Un peu de code sera peu être plus parlant (j'ai simplifié au maximum):

//-----------------------------------------------
// class Main:
//-----------------------------------------------

private var map1:Array;
private var game:Game;

public function Main(){
this.map1 = new Array([0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]);
this.loadGame();
}

private function loadGame(){
this.game = new Game();
this.game.setMap(this.map1);
trace(this.map1);
//Renvoie le tableau Array([1,0,0,1], ?????
// [0,0,0,0], ?????
// [0,0,0,0], ?????
// [1,0,0,1]) ?????
}


//-----------------------------------------------
// class Game:
//-----------------------------------------------

private var maps:Array;

public function Game(){

}

public function setMap(themap:Array){
this.maps = themap;
this.maps[0][0] = 1;
this.maps[0][3] = 1;
this.maps[3][0] = 1;
this.maps[3][3] = 1;
}

//-----------------------------------------------

Pourquoi est-ce qu'il modifie aussi le map1 de l'objet parent
j'ai essayé de jouer avec public et private, mais sans resultat... Ca doit être un truc tout con, comme d'hab, mais jtrouve pas...

Merci pour votre aide!

4 réponses

Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut,

Les tableaux en actionscript 3 sont passe par reference et non pas par valeur.

Bonne continuation.

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
Messages postés
34
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2009

Salut!

Merci pour cette précision (et désolé de pas avoir répondu plus tôt, manque de temps...)

Je vais me renseigner sur le sujet. Du coup aurais tu une astuce pour pouvoir passer un tableau en paramètre tel que je le souhaite? ou une autre solution?

Je vais tester la duplication du tableau en le listant et en copiant chaque valeur à l'aide de boucles for, mais doit y avoir quelque chose d'autre, ça me semble un peu lourd comme traitement...

Merci pour ton aide!

@+
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut,

Pour ne pas modifier le tableau, cree une copie avant de la passer en parametre.
example:

var monTableau:Array = Array([]);
var maCopieTableau = monTableau.concat();
/*en modifiant maCopieTableau , monTableau reste intact. Tu peux donc utiliser cette seconde variable et la passer en parametre*/


Bonne continuation.

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
/B&
Messages postés
34
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2009

Ok, jvais tester ça.

Merci pour ton aide!