舞台什么时候加载?

我在Adobe Flash Professional CS5中构建项目(使用ActionScript 3.0)。

在其中一个类中,我想根据场景的大小将一些对象添加到场景中。

我在构造函数中使用下面的代码:

stageWidthint = stage.stageWidth;
stageHeightint = stage.stageHeight;
startMenu.x = stageWidthint / 2;
startMenu.y = ((stageHeightint / 2) - 40);
instructionsMenu.x = stageWidthint / 2;
instructionsMenu.y = ((stageHeightint / 2) + 2);
highscoreMenu.x = stageWidthint / 2;
highscoreMenu.y = ((stageHeightint / 2) + 44);
quitMenu.x = stageWidthint / 2;
quitMenu.y = ((stageHeightint / 2) + 86);
this.addChild(startMenu);
this.addChild(instructionsMenu);
this.addChild(highscoreMenu);
this.addChild(quitMenu);

stage上我得到一个空引用。 经过快速搜索,我发现当时还没有载入stage 。 不过,我想把这些孩子加入课堂。 舞台什么时候加载? 如何解决这个问题,并在游戏开始时仍显示所有内容?


在构造函数中使用ADDED_TO_STAGE事件。

 public function ConstructorName():void 
 {
     addEventListener(Event.ADDED_TO_STAGE,onAddedToStage); 
 }

 private function onAddedToStage(e:Event):void 
 {   
      removeEventListener(Event.ADDED_TO_STAGE,onAddedToStage);
      // add init code here
 }

我不确定在使用场景时情况如何,但您可以尝试:

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


  public class Test extends MovieClip {


    public function Test() {
      if (stage) {
        init();
      } else {
        addEventListener(Event.ADDED_TO_STAGE, init);
      }
    }

    protected function init(event:Event = null):void {
      trace("init");
      if (event) { removeEventListener(Event.ADDED_TO_STAGE, init) };
      //your code here
    }
  }
}

Stage对象不是全局可用的。
扩展MovieClip的类将有一个属性“stage”(小写)
在您的课程实例已添加到舞台之前,“stage”属性为null。
这就是我们监听ADD_TO_STAGE事件的原因。

stage = null的解决方法其中之一将作为构造函数IE中的参数传递到舞台中:var xxx:MyClass = new MyClass(s​​tage); 也就是说,如果创建实例的类已经有阶段的引用。

我想补充说,你的自定义类的访问阶段不是一个好的面向对象的实践,因为类只应该关注自己。 我会建议重写宽度setter / getters。 这是因为尺寸可以改变,例如风景到人像旋转。

链接地址: http://www.djcxy.com/p/48267.html

上一篇: When does stage get loaded?

下一篇: Flash CS5.5 Library & Flash Builder 4.5 workflow