AS3 - 无法访问gotoAndPlay上的空对象引用的属性或方法

时间:2016-07-30 13:32:15

标签: actionscript-3 flash

我有一个包含影片剪辑的场景。该影片剪辑有一个按钮,用于控制场景中符号的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")
            }
    }
}

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

当我尝试去另一个场景时,我不知道 rkt 突然变为空的原因。我试过检查属性是否为null但是没有帮助。

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

一切都是徒劳的。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  

我不知道的是当我试图去另一个场景时,为什么rkt突然变为空。我试过检查属性是否为null但是没有帮助。

它是null的对象,而非属性。

  

我尝试删除eventListener

由于对launch的持续调用并非由事件触发,而setTimeout会继续调用,因此对此不会有所帮助。

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

答案 1 :(得分:-1)

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

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

我真的希望这能有助于其他人。经过大量的网上研究后,我才在这里发布了一个问题。看来这个错误困扰了很多开发人员。