2012-03-28 3 views
0

J'ai une personne de classe, c'est-à-dire la définition de Personne avec le nom et l'âge. SuperClass est la classe principale. Je veux afficher le nom et l'âge dans un textBox sur le document Flash.Structure de classe dans ActionScript

Je suis un débutant à Flash. Quelque chose ne va pas dans la structure de classe ou les conventions de codage. Il donne l'erreur "Appel à la méthode éventuellement indéfinie addChild".

package { 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.text.TextField; 

    public class SuperbClass extends Sprite{ 
     public function SuperbClass() { 
     var p1=new Person("Brinda",30); 

     } 
    } 
} 
import flash.text.TextField; 
class Person { 
    private var name:String; 
    private var age:Number; 
    var tf:TextField;  
    public function Person(n:String,a:Number){ 
     name=n; 
     age=a; 
     init(); 
    } 
    public function init():void{ 
     trace(name+' is '+age+' year old');  
     tf=new TextField(); 
     tf.text=name+' is '+age+' year old'; 
     addChild(tf); 
    } 
} 

Répondre

2

Votre classe Personne est un objet de données et ne doit pas essayer d'effectuer des opérations d'affichage.

Alors:

protected var p1:Person; 
protected var tf:Textfield; 

public function SuperbClass() { 
    p1 = new Person('Brenda', 30); 
    tf = new TextField(); 
    tf.text = p1.name + ' is ' + p1.age + ' years old.'; 
    addChild(tf);//SuperBClass extends Sprite, so this works 
} 

Notez que vous aurez besoin de faire les variables personne publique pour le code ci-dessus fonctionne. Vous pouvez également créer un getter sur la personne qui retourne la chaîne entière:

public function get info():String { 
    return name + ' is ' + age + ' years old.'; 
} 

Vous appelleriez cela comme:

tf.text = p1.info; 
+0

bonne explication. –

+0

Si j'ajoute une autre fonction publique de getter, j'obtiens le nom: String {return name;}. Pourquoi ça ne marche pas? –

+1

C'est difficile à dire sans voir votre code, mais si votre variable privée a le même nom que la fonction getter, cela ne fonctionnera pas. C'est la raison pour laquelle de nombreuses personnes choisissent de préfixer "_" à leurs noms de variables privés par convention (par exemple _name). –

0

Votre classe de personne doit étendre Movieclip ou Sprite ou quelque chose qui a la méthode addChild.

Questions connexes