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

Résolu
slog9 Messages postés 34 Date d'inscription dimanche 16 novembre 2003 Statut Membre Dernière intervention 24 octobre 2009 - 15 oct. 2009 à 02:34
slog9 Messages postés 34 Date d'inscription dimanche 16 novembre 2003 Statut Membre Dernière intervention 24 octobre 2009 - 24 oct. 2009 à 12:26
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!
A voir également:

4 réponses

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
19 oct. 2009 à 22:01
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 ...!
3
slog9 Messages postés 34 Date d'inscription dimanche 16 novembre 2003 Statut Membre Dernière intervention 24 octobre 2009
23 oct. 2009 à 22:54
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!

@+
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
24 oct. 2009 à 00:36
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&
0
slog9 Messages postés 34 Date d'inscription dimanche 16 novembre 2003 Statut Membre Dernière intervention 24 octobre 2009
24 oct. 2009 à 12:26
Ok, jvais tester ça.

Merci pour ton aide!
0
Rejoignez-nous