我有一个包含影片剪辑的场景。该影片剪辑有一个按钮,用于控制场景中符号的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 ,并调用驻留在场景本身的动作层(原始场景)中的函数,而不是直接从影片剪辑中转到场景。
一切都是徒劳的。
有什么想法吗?
答案 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...
}
}
我真的希望这能有助于其他人。经过大量的网上研究后,我才在这里发布了一个问题。看来这个错误困扰了很多开发人员。