2011-01-01 2 views
1

A:AS3 this.graphics appels ne classe rien

[SWF(width='800',height='600',frameRate='24')] 
public class A extends MovieClip { 
    private var b:B; 
    public function A(){ 
    super(); 
    b = new B(); 
    addChild(b); 
    addEventListener(Event.ENTER_FRAME, update); 
    } 
    private function update(e:Event):void { 
    b.draw(); 
    } 
} 

classe B:

public class B extends MovieClip { 
    public function draw():void { 
     //! following code works well if put in constructor, but not here 
     this.graphics.beginFill(0xff0000); 
     this.graphics.drawCircle(200,200,50); 
    } 
} 

this.graphics appels ne font rien dans la méthode de tirage au sort, mais fonctionnent très bien à l'intérieur constructeur B`s, ce je fais mal?

Répondre

1

Je ne vois pas le problème immédiatement. Un couple de choses à considérer:

  • Ajouter un constructeur à B qui appelle super()
  • Vous ajoutez l'écouteur d'événement à A, alors A doit être sur la scène avant que l'événement ENTER_FRAME se produira
  • Vous voulez probablement la première utilisation graphics.clear(), et terminer par Graphics.endFill()
+0

Comme Kai dit, il semble que la fonction mise à jour() ne se déclenche pas, il est donc plus que probable que A ne figure pas dans la liste d'affichage principale. Ajoutez-le à la scène ou à l'intérieur de quelque chose qui est dans la scène. Vous pouvez le tester en mettant un trace() dans la mise à jour(). – erkmene

+0

a est sur scène, B appelle super, et tout code de dessin fonctionne à l'intérieur de la mise à jour, mais pas à l'intérieur dessiner appelé à partir de la mise à jour – zzz

0

étrange que le code fonctionne bien pour moi (Chrome sur Mac OS X). La seule façon de voir que ça se passe mal serait que l'écouteur d'événements soit appelé quand b est nul, donc vous pouvez y mettre une coche "if (b) b.draw();"

Ou le film est arrêté (comme ce qui se passe dans IE, où vous devez cliquer pour activer le swf exécuter)