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."
为什么?
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."
为什么?
如前所述,stage 是继承自 DisplayObject 的类的属性。在将舞台添加到舞台之前,舞台对类不可用,通常通过 DisplayObjectContainer 的 addChild 方法。
舞台属性仅可用于显示已添加到舞台的对象。您的类不继承自 DisplayObject,因此您的类不存在舞台属性。即使您的类确实继承自 DisplayObject,也需要通过 addChild() 从父显示对象添加到舞台。
如果您的类不打算作为显示对象,但需要用于测量或其他属性的舞台对象,请将其作为参数发送给构造函数。
否则,让您的类继承 DisplayObject,然后您必须为对象添加到舞台时添加事件侦听器:
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
在 onAddedToStage() 方法中,stage 现在可用(编辑:只要将最顶层的父容器添加到 stage,stage 属性就可用)。
我通过将阶段对象引用传递给类的构造函数来解决这个问题。老实说,我不喜欢这个解决方案,因为你必须通过这个阶段,但这是我看到的最简单的方式。
这就是我在构造函数中所做的:
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;
});
}
山姆的回答实际上是完全正确的。最简单的解释是它stage
是一个实例而不是类成员。
如果您的字段未声明为静态,您将能够访问 stage。但是你可能会得到一个空引用错误;)