舞台什么时候加载?
我在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(stage); 也就是说,如果创建实例的类已经有阶段的引用。
我想补充说,你的自定义类的访问阶段不是一个好的面向对象的实践,因为类只应该关注自己。 我会建议重写宽度setter / getters。 这是因为尺寸可以改变,例如风景到人像旋转。
链接地址: http://www.djcxy.com/p/48267.html