Classes AS: appeler un attribut [Résolu]

Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
- - Dernière réponse : mapi3
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
- 29 mars 2006 à 12:18
Bonsoir,



J'essaie d'utiliser les classes ActionScript. Ca marche pas mal sauf
que dans une classe il m'est impossible d'appeler un attribut lorqu'il
est une instance d'une classe que j'ai crée. En dehors ca marche
(nomdinstance.attribut) mais dans la classe meme c'est impossible:



Exemple. L'attribut est _pere de type Noeud. Il m'est impossible
d'appeler dans la classe Noeud: trace(_pere) par exemple ni meme
trace(getPere());





Meri d'avance...





Une partie du code donne:







class Noeud extends MovieClip{



var _pere:Noeud;



function Noeud(xml:XML, pere:Noeud, nbEnfants:Number){



setPere(pere);

}





public function setPere(pere:Noeud){

_pere=pere;

}

public function getPere():Noeud{

return _pere;

}



}
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
1623
Date d'inscription
samedi 3 janvier 2004
Dernière intervention
9 juin 2011
1
3
Merci
C'est encore plus simple que je ne pensais! lol

Inverse simplement le setNiveau et le setPere dans ton constructeur! Ensuite, à la place de "undefined" je récupère [type Object] ...ce qui est beaucoup mieux déjà!

Suffit de remplacer alors ton "trace(this._pere);" par "trace(_pere._number);" pour voir que tu accèdes bien aux propriétés du père.

Dans mon .fla de test, voilà ce que j'ai:

var xml:XML = new XML("<racine></racine>");
var n0:Noeud = new Noeud(xml, null, 4, 2);var n:Noeud new Noeud(xml, n0, 3, 1);> ça me retourne donc "undefined" et 2! Cool!!! Par contre, une remarque: est-ce que _number est facultatif? Car avoir "null" dans une déclaration de classe...bof, j'aurais mis _pere en dernière position (à moins que _number soit plus souvent facultatif!)

@+! Samy

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 110 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_goldenboy68
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Dernière intervention
2 juillet 2007
0
Merci
C'est très étonnant, donne le code exact qui ne marche pas s'il te plais :)

SuperDevy, c la !
Commenter la réponse de SuperDevy
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Dernière intervention
2 juillet 2007
0
Merci
extends MovieClip > voici le problème !
Pour créer un MovieClip tu ne peut faire que attachMovie(libid...). tu ne peut donc pas donner des arduments au constructeur.
Crées une fonction init(args) {...} pour faire l'initialisation de ton occurence.

SuperDevy, c la !
Commenter la réponse de SuperDevy
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
0
Merci
Merci pour la rapidité...



class Noeud extends MovieClip{

var _nom:String;

var _proba:String;

var _niveau:Number;

var _pere:Noeud;

var _enfants:Array;

var _number=0;

var _type:String;

var _valeur=0;



function Noeud(xml:XML, pere:Noeud, nbEnfants:Number, number:Number){

setNom(xml.attributes.nom);

setNiveau();

setPere(pere);

setEnfants(nbEnfants);

setNumber(number);

setType(xml.attributes.type);



}

public function setType(type:String):Void{

_type=type;

}

public function setNumber(number:Number):Void{

_number=number;

}



public function setNom(nom):Void{

_nom=nom;

}

public function getNom():String{

return _nom;

}

public function setPere(pere:Noeud){

_pere=pere;

}

public function getPere():Noeud{

return _pere;

}



public function setEnfants(nb:Number){

_enfants=new Array(nb);

}



public function niveau(noeud:Noeud):Number{


trace(this._pere);
//Ca renvoie undefined dans le panneau de sortie

return
1;
//ou que je mette le trace ca renvoie undefined

}

public function setNiveau(){

_niveau=niveau(this);

}

public function toString():String{

return getNom();

}
Commenter la réponse de mapi3
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
0
Merci
J'ai fait le fonction init(), toujours le meme probleme. (Jai pas mis du tout de constructeur).

Ce qui est étonnat c'est que dans le debogueur _pere existe bel et bien et renvoie bien la bonne référence.
Commenter la réponse de mapi3
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
0
Merci
et le pire dans tout ca c'est que dans une autre classe je peux appeler
trace(instanceNoeud._pere) et ca me renvoie la bonnne valeur !!!!!!!!!
Commenter la réponse de mapi3
Messages postés
760
Date d'inscription
mercredi 11 décembre 2002
Dernière intervention
12 novembre 2008
0
Merci
Salut
Montre comment tu crée ton objet Noeud

<hr>Venez que je vous vide de votre sang ^^
Commenter la réponse de shubenka
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
0
Merci
lass Arbre extends MovieClip{

var _racine:Noeud;

static var _number:Number;

var noeuds:Array;



function Arbre(xml:XML){

_number=0;

noeuds=new Array();

prefixe(xml, null);

_racine=noeuds[0];

}



function prefixe(noeud_xml:XML, pere:Noeud):Noeud{

noeuds[_number]=new
Noeud();

//ICI

noeuds[_number].init(noeud_xml, pere, noeud_xml.childNodes.length, _number);

var temp=noeuds[_number];

_number++;

if(noeud_xml.hasChildNodes){

for(var i=0; i<noeud_xml.childNodes.length; i++){


temp._enfants[i]=prefixe(noeud_xml.childNodes[i],
temp);

}

}

return temp;

}
Commenter la réponse de mapi3
Messages postés
760
Date d'inscription
mercredi 11 décembre 2002
Dernière intervention
12 novembre 2008
0
Merci
une classe qui hérite de Movieclip ne s'intencie pas comme ca va voir ici http://www.developpez.net/forums/viewtopic.php?t=349607&highlight=
j'ai trouvé ca vite fait sur google
Aprés pour ton probléme je voit pas trop

<hr>Venez que je vous vide de votre sang ^^
Commenter la réponse de shubenka
Messages postés
760
Date d'inscription
mercredi 11 décembre 2002
Dernière intervention
12 novembre 2008
0
Merci
dsl du double post
essaye de faire un trace de pere dans
function prefixe(noeud_xml:XML, pere:Noeud):Noeud{

}
l'erreur est peut étre bcoup plus haut

<hr>Venez que je vous vide de votre sang ^^
Commenter la réponse de shubenka
Messages postés
1623
Date d'inscription
samedi 3 janvier 2004
Dernière intervention
9 juin 2011
1
0
Merci
Moi je pense que ça vient du "this"...faudrait enregistrer une occurence de la classe Noeud dans la classe et faire le trace après!

Essaie en remplaçant ton "trace(this._pere);" par:

var temp:Noeud = this;
trace(temp._pere);

@+! Samy
Commenter la réponse de cs_goldenboy68
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
0
Merci
et non c pas ca...

Je repete que _pere est accessible d'une autre classe.

Jai essayé tes 2 lignes samy: toujours rien. Vraiment etrange.

Je pense que je vais me debrouiller autrement. C con mais c comme ca...

Merci beaucoup à tous
Commenter la réponse de mapi3
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Dernière intervention
20 janvier 2010
0
Merci
c pourtant tellement évident...

Merci.
Commenter la réponse de mapi3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.