gotoAndPlay 有效,但停止而不是播放? -as3

gotoAndPlay works, but Stops rather than plays? - as3

以下 as3 位于根级别实例名称 'counter_int' 的影片剪辑中,目标影片剪辑实例名称 'win_message' 也单独存在于根级别。

在使用下面的 listener/function 和 if 语句方法之前,它工作得很好,当在 'counter_int' 中进入包含与 as3 相同的新帧时,'win_message' 动画效果很好,减去侦听器和 if 语句。

一切仍然有效,除了它仍然与目标动画片段通信,因为 'win_message' 动画片段在第 2 帧停止,而不是继续播放。没有停止();目标动画片段中的命令,而不是第 1 帧顺便说一句。

addEventListener(Event.ENTER_FRAME, success);

function success(ev : Event) : void

{
    if (linked_total.text == (5).toString () )
    { 
       Object(root).win_message.gotoAndPlay(2);
    }
}

如有任何帮助,我们将不胜感激!如果我不能很好地解释我的问题,我们深表歉意!

谢谢

你的问题是因为你在 Event.ENTER_FRAME 事件的监听器中使用了 gotoAndPlay() ,所以它被重复调用直到条件为假。

虽然这样做是一种不好的方式,但您可以改用您知道会在用户需要时执行的任何准时操作(单击按钮、更改文本字段...)。

如果您出于任何其他原因仍然需要使用 Event.ENTER_FRAME 事件侦听器,您应该确保您的条件只为真一次(或者至少您将调用 gotoAndPlay() 一次),然后您可以调用 gotoAndPlay(),例如使用 Boolean 变量:

var first_run:Boolean = true;

addEventListener(Event.ENTER_FRAME, success);
function success(ev:Event) : void
{
    // when first_run is false, we are sure that even if linked_total.text still equals to "5"
    // this condition will always be false
    if (int(linked_total.text) == 5 && first_run)
    {       
        first_run = false;
        MovieClip(root).win_message.gotoAndPlay(2);
    }
}

你也可以在第一次条件为真时去掉事件监听器,但在这种情况下,我不知道你为什么要使用Event.ENTER_FRAME事件监听器!

function success(ev:Event) : void
{
    if (int(linked_total.text) == 5)
    {       
        removeEventListener(Event.ENTER_FRAME, success);
        MovieClip(root).win_message.gotoAndPlay(2);
    }
}

...确实有很多方式可以通过避免您遇到的行为来完成您想要的。

希望能帮到你。