【问题标题】:AS3 - Cannot access a property or method of a null object reference on gotoAndPlayAS3 - 无法访问 gotoAndPlay 上的空对象引用的属性或方法
【发布时间】:2016-12-05 02:18:17
【问题描述】:

我有一个包含影片剪辑的场景。该影片剪辑有一个按钮,用于控制场景中符号的 y 位置。我试图做的是当符号达到某些 y 值时转到下一个场景。当到达所需的 y 位置时,我使用了 gotoAndPlay,切换到新场景,但输出上出现错误,如标题所示。这是影片剪辑中出现的代码:

launch_btn.addEventListener(MouseEvent.CLICK, init_launch)

function init_launch(evt:MouseEvent):void
{
    MovieClip(root).launch_video.play();
    var k = setTimeout(launch, 1);
}

function launch():void
{
    trace(MovieClip(root).rkt.y);

    if(MovieClip(root).rkt.y != null)
    {
        //progressively changing the y position
        if(MovieClip(root).rkt.y != null)
        {
            if(MovieClip(root).rkt.y < 600)
            {
                MovieClip(root).rkt.y -=0.3
            }
            if(MovieClip(root).rkt.y < 500)
            {
                 ...
            }
            setTimeout(launch, 1);

            if(MovieClip(root).rkt.y < -150)
            {
                MovieClip(root).gotoAndPlay(1, "Scene 3")
            }
    }
}

目前,在编译此代码时,错误指向“trace(MovieClip(root).rkt.y);”行。

我不明白为什么当我尝试去不同的场景时 rkt 突然变为空。我尝试检查该属性是否为空,但这没有帮助。

我尝试删除 eventListener,并调用驻留在场景本身(原始)的动作层中的函数,而不是直接从影片剪辑进入场景。

一切都是徒劳的。

有什么想法吗?

【问题讨论】:

标签: actionscript-3 flash


【解决方案1】:

我不明白为什么当我尝试去不同的场景时 rkt 突然变为空。我尝试检查该属性是否为空,但这没有帮助。

null 是对象,而不是属性。

我尝试删除 eventListener

考虑到对launch 的持续调用不是由事件触发而是由setTimeout 触发,这将无济于事。

停止使用setTimeout 并使用Timer。这允许您正确删除事件侦听器并实际停止它。

【讨论】:

    【解决方案2】:

    MovieClip(root) 实际上是在到达 y 位置时变为 null 的属性。我修改了 launch() 中的条件来处理它:

     function launch():void
     {
        if(MovieClip(root)!= null)
        {
            rest of code...
        }
     }
    

    我真的希望这对其他人有所帮助。经过大量在线研究,特别是在这里,我才在这里发布了一个问题。看来这个错误困扰了很多开发者。

    【讨论】:

    • 很高兴看到您自己找到了问题的原因。然而,解决方案并不是很好。该函数仍在连续调用,您的 if 语句只是防止错误。但函数应该首先被调用。
    • 嗨 null,我实现了 Timer 而不是 setTimeout。它有效,但如果我删除 if 语句,我仍然会得到同样的错误。问题是,我应该保留 if 语句吗?除非我没有正确实现 Timer。
    • 你要停止Timer吗?您要删除添加到其中的侦听器吗?
    • 你说得对!除了停止计时器,我什么都做了。非常感谢@null,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多