Classes AS: appeler un attribut [Résolu]

Signaler
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010
-
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010
-
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;

}



}

13 réponses

Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
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
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

C'est très étonnant, donne le code exact qui ne marche pas s'il te plais :)

SuperDevy, c la !
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

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 !
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010

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();

}
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010

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.
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010

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 !!!!!!!!!
Messages postés
759
Date d'inscription
mercredi 11 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2008

Salut
Montre comment tu crée ton objet Noeud

<hr>Venez que je vous vide de votre sang ^^
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010

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;

}
Messages postés
759
Date d'inscription
mercredi 11 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2008

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 ^^
Messages postés
759
Date d'inscription
mercredi 11 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2008

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 ^^
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
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
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010

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
Messages postés
17
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
20 janvier 2010

c pourtant tellement évident...

Merci.