package {
import flash.display.Stage;
public class MyGlobal {
public static var CX:Number = stage.stageWidth / 2;
public static var CY:Number = stage.stageHeight / 2;
}
}
错误是"1120: Access of undefined property stage."
为什么?
答案 0 :(得分:9)
如上所述,stage是从DisplayObject继承的类的属性。在将类添加到舞台之前,通常通过DisplayObjectContainer的addChild方法将舞台暂停。
答案 1 :(得分:3)
舞台属性仅可用于显示已添加到舞台的对象。您的类不从DisplayObject继承,因此您的类不存在stage属性。即使您的类继承自DisplayObject,也需要通过父显示对象的addChild()将其添加到舞台中。
如果您的类不是显示对象,但需要测量的阶段对象或其他属性,请将其作为参数发送给构造函数。
否则,让你的类继承DisplayObject,然后你必须为对象添加到舞台时添加一个事件监听器:
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
在onAddedToStage()方法中,舞台现在可用(编辑:只要最顶层的父容器已添加到舞台中,舞台属性将可用。)
答案 2 :(得分:1)
我通过将阶段Object引用传递给类的构造函数来解决这个问题。老实说,我不喜欢这个解决方案,因为你必须通过舞台,但这是我看到的最简单的方式。
这是我在构造函数中所做的:
public function Ball(b:Object,stageRef:Object)
{
ballObject = b;
speed = 10;
stageRef.addEventListener(KeyboardEvent.KEY_DOWN,function(e:KeyboardEvent):void{
currentKeyCode = e.keyCode;
});
stageRef.addEventListener(KeyboardEvent.KEY_UP,function(e:KeyboardEvent):void{
currentKeyCode = 0;
});
}
答案 3 :(得分:0)
Sam的回答实际上是对的。最简单的解释是stage
是一个实例而不是类成员。
如果您的字段未声明为静态,则可以访问阶段。但是你可能会得到一个空引用错误;)