AS3无法从自定义类访问阶段

mat*_*eok 2 stage sprite actionscript-3

如何从自定义类访问舞台,尤其是flash Movie的宽度和鼠标位置?

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

   public class TableManager extends Sprite
   {
        public function TableManager() {
            sayStage();
        }
        public function sayStage():void 
        {
            trace(stage);
        }
  }   
} 
Run Code Online (Sandbox Code Playgroud)

这只会返回nill.我知道DisplayObjects在启动之前没有任何阶段,因此你无法访问构造函数中的阶段,但即使我稍后调用sayStage()作为实例方法它也行不通.

我究竟做错了什么?

Cad*_*din 7

如果TableManager在舞台上,您可以使用this.stage.

诀窍是你必须等待将实例添加到舞台上.你可以听取这个ADDED_TO_STAGE事件,这样你就知道什么时候发生了.

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

public class TableManager extends Sprite {
    public function TableManager() {
        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage(e:Event):void {
        this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        sayStage();
    }

    public function sayStage():void {
        trace(this.stage);
    }
}   
}
Run Code Online (Sandbox Code Playgroud)