无法从方法访问阶段属性?

时间:2011-05-12 00:17:03

标签: flash actionscript-3 scope nullreferenceexception

我的舞台上有一个物体,叫做obj。

我还有一个名为“物理学”的课程,其中包含一系列物理学方法,例如惯性,重力和弹跳墙。为了做其中的一些,我需要访问stage.stageWidth和stageHeight属性。

我的代码如下:

        public function wallBounce(obj)
    {
        this.stageRef = stageRef
        if (obj.x > stageRef.stageWidth || obj.x < 0)
        {
            obj.vX = (obj.vX * -1) * bounceConst
        }
    }

这应该检查对象的x值是否大于stageWidth或小于0.当我运行此代码时,它说:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

我是一名半新手程序员,完全是自学成才,不知道造成这种情况的原因。我花了一些谷歌搜索它,我认为它与范围有关,但我不知道如何解决这个问题,甚至不知道范围真正做什么。

再次,对不起,如果这是一个非常愚蠢的问题,但我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:0)

this.stageRef = stageRef;

我没有看到此功能对stageRef的任何引用?另外,因为你在课堂上工作 - this.valval是一回事。你也许会去:

this.stageRef = this.stageRef;

或者

stageRef = stageRef;

问题基本上是stageRef为空 - 这有帮助吗?看来你的意思是:

this.stageRef = <some reference to stage youve defined somewhere else>;

这样做似乎很奇怪 - 只要您尝试调用的对象wallBounce()来自DisplayList,您就可以通过stage访问该阶段。如果你想避免这个函数中的错误(也许它在实际被添加到DisplayList之前运行一次),那么就把它放在顶部:

if(!stage) return;

所以:

public function wallBounce(obj:Object):void
{
    if(!stage) return;

    //this.stageRef = stageRef
    if (obj.x > stage.stageWidth || obj.x < 0)
    {
        obj.vX = (obj.vX * -1) * bounceConst
    }
}

return将基本上结束该功能。

根据评论:

可以在包含该阶段的Document Class中创建一个静态属性。像这样:

package
{
    import flash.display.MovieClip;
    import flash.display.Stage;

    public class DocumentClass extends MovieClip
    {
        // vars
        public static var stageRef:Stage;

        /**
         * Constructor
         */
        public function DocumentClass()
        {
            stageRef = stage;
        }
    }
}

然后您可以从其他类访问舞台,如下所示:

public function wallBounce(obj:Object):void
{
    //this.stageRef = stageRef
    if (obj.x > DocumentClass.stageRef.stageWidth || obj.x < 0)
    {
        obj.vX = (obj.vX * -1) * bounceConst
    }
}
相关问题