2010-02-13 4 views
1

Dans ma classe AS3 j'appelle this.width, et la valeur qu'elle renvoie est toujours 1, même si c'est impossible étant donné le contenu de l'objet.this.width dans une classe renvoie toujours la même valeur

Est-ce un comportement standard pour AS3?

Une version simple de la classe est affichée ci-dessous. Il est attaché à un symbole MovieClip qui contient juste un hexagone simple.

package { 

    import flash.display.*; 
    import flash.utils.*; 
    import flash.events.*; 

    public class Hexagon extends MovieClip 
    { 
     var startWidth:Number; 
     var startHeight:Number; 

     public function Hexagon() 
     { 
      var myTimer:Timer = new Timer(2000); 
      myTimer.addEventListener(TimerEvent.TIMER, timerFunction); 
      myTimer.start(); 

      startWidth = this.width; 
      startHeight = this.height; 

      trace("startWidth:" + " " + startWidth); 
      trace("startHeight:" + " " + startHeight); 
     } 

     function timerFunction (evt:TimerEvent):void 
     { 

     } 
    } 
} 
+0

Le problème est que vous ne l'utilisez Silverlight. –

+0

Quelle classe est la vôtre? Peut-être que vous pouvez poster une version simplifiée, sans cela, il est difficile de dire quel peut être le problème. –

+0

Étend MovieClip. J'ai amended ma question originale pour inclure le code simplifié. – cmal

Répondre

0

Oui, c'est standard, c'est parce que vous demandez la largeur et la hauteur dans le Constructor, à quel point les paramètres de propriété/accesseurs ne sont pas établis. Attendez que les propriétés aient été définies officiellement, ce qui est le plus fiable après Event.ADDED_TO_STAGE. Cela fonctionne pour moi:

package 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.utils.*; 

    public class Movie extends MovieClip 
    { 
     public var startWidth:Number; 
     public var startHeight:Number; 

     public function Movie() 
     { 
      var myTimer:Timer = new Timer(2000); 
      myTimer.addEventListener(TimerEvent.TIMER, timerFunction); 
      myTimer.start(); 

      startWidth = this.width; 
      startHeight = this.height; 

      trace("startWidth:" + " " + startWidth); 
      trace("startHeight:" + " " + startHeight); 
      addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
     } 

     public function addedToStageHandler(event:Event):void 
     { 
      startWidth = this.width; 
      startHeight = this.height; 

      trace("new startWidth:" + " " + startWidth); 
      trace("new startHeight:" + " " + startHeight); 
     } 

     public function timerFunction(evt:TimerEvent):void 
     { 

     } 
    } 
} 

Laissez-moi savoir si cela aide, Lance

Questions connexes