【问题标题】:Why is stage undefined in my Actionscript 3 class even though I've imported the Stage class?即使我已经导入了 Stage 类,为什么我的 Actionscript 3 类中还没有定义 stage?
【发布时间】:2011-01-04 01:17:18
【问题描述】:
 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."WHY?

【问题讨论】:

    标签: actionscript-3 stage


    【解决方案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;   
        });
    }
    

    【讨论】:

      【解决方案2】:

      Sam 的回答其实很正确。最简单的解释是stage 是一个实例而不是类成员。

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

      【讨论】:

        【解决方案3】:

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

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

        否则,让你的类继承DisplayObject,那么你必须为对象添加到舞台时添加一个事件监听器:

        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2020-08-25
            • 2021-01-29
            • 2021-12-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-12
            • 1970-01-01
            相关资源
            最近更新 更多