Classes AS: appeler un attribut

Résolu
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010 - 27 mars 2006 à 21:35
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre 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;

}



}

13 réponses

cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
29 mars 2006 à 08:42
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
3
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
27 mars 2006 à 23:00
C'est très étonnant, donne le code exact qui ne marche pas s'il te plais :)

SuperDevy, c la !
0
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
27 mars 2006 à 23:02
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 !
0
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010
27 mars 2006 à 23:05
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();

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010
27 mars 2006 à 23:20
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.
0
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010
27 mars 2006 à 23:29
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 !!!!!!!!!
0
shubenka Messages postés 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 novembre 2008
28 mars 2006 à 00:08
Salut
Montre comment tu crée ton objet Noeud

<hr>Venez que je vous vide de votre sang ^^
0
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010
28 mars 2006 à 00:18
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;

}
0
shubenka Messages postés 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 novembre 2008
28 mars 2006 à 00:28
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 ^^
0
shubenka Messages postés 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 novembre 2008
28 mars 2006 à 00:30
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 ^^
0
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
28 mars 2006 à 17:41
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
0
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010
28 mars 2006 à 18:25
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
0
mapi3 Messages postés 17 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 20 janvier 2010
29 mars 2006 à 12:18
c pourtant tellement évident...

Merci.
0
Rejoignez-nous