Classes AS: appeler un attribut [Résolu]

mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 27 mars 2006 à 21:35 - Dernière réponse : mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention
- 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
cs_goldenboy68 1623 Messages postés samedi 3 janvier 2004Date d'inscription 9 juin 2011 Dernière intervention - 29 mars 2006 à 08:42
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

Merci cs_goldenboy68 3

codes-sources a aidé 80 internautes ce mois-ci

Commenter la réponse de cs_goldenboy68
SuperDevy 842 Messages postés dimanche 24 novembre 2002Date d'inscription 2 juillet 2007 Dernière intervention - 27 mars 2006 à 23:00
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
SuperDevy 842 Messages postés dimanche 24 novembre 2002Date d'inscription 2 juillet 2007 Dernière intervention - 27 mars 2006 à 23:02
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
mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 27 mars 2006 à 23:05
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
mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 27 mars 2006 à 23:20
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
mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 27 mars 2006 à 23:29
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
shubenka 760 Messages postés mercredi 11 décembre 2002Date d'inscription 12 novembre 2008 Dernière intervention - 28 mars 2006 à 00:08
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
mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 28 mars 2006 à 00:18
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
shubenka 760 Messages postés mercredi 11 décembre 2002Date d'inscription 12 novembre 2008 Dernière intervention - 28 mars 2006 à 00:28
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
shubenka 760 Messages postés mercredi 11 décembre 2002Date d'inscription 12 novembre 2008 Dernière intervention - 28 mars 2006 à 00:30
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
cs_goldenboy68 1623 Messages postés samedi 3 janvier 2004Date d'inscription 9 juin 2011 Dernière intervention - 28 mars 2006 à 17:41
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
mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 28 mars 2006 à 18:25
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
mapi3 17 Messages postés mercredi 27 juillet 2005Date d'inscription 20 janvier 2010 Dernière intervention - 29 mars 2006 à 12:18
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.