3
 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."为什么?

4

4 回答 4

9

如前所述,stage 是继承自 DisplayObject 的类的属性。在将舞台添加到舞台之前,舞台对类不可用,通常通过 DisplayObjectContainer 的 addChild 方法。

于 2010-01-12T06:51:41.517 回答
3

舞台属性仅可用于显示已添加到舞台的对象。您的类不继承自 DisplayObject,因此您的类不存在舞台属性。即使您的类确实继承自 DisplayObject,也需要通过 addChild() 从父显示对象添加到舞台。

如果您的类不打算作为显示对象,但需要用于测量或其他属性的舞台对象,请将其作为参数发送给构造函数。

否则,让您的类继承 DisplayObject,然后您必须为对象添加到舞台时添加事件侦听器:

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

在 onAddedToStage() 方法中,stage 现在可用(编辑:只要将最顶层的父容器添加到 stage,stage 属性就可用)。

于 2010-01-12T06:55:19.640 回答
1

我通过将阶段对象引用传递给类的构造函数来解决这个问题。老实说,我不喜欢这个解决方案,因为你必须通过这个阶段,但这是我看到的最简单的方式。

这就是我在构造函数中所做的:

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;   
    });
}
于 2011-10-02T07:45:57.193 回答
0

山姆的回答实际上是完全正确的。最简单的解释是它stage是一个实例而不是类成员。

如果您的字段未声明为静态,您将能够访问 stage。但是你可能会得到一个空引用错误;)

于 2010-01-12T20:51:22.797 回答