以下as3位于根级别的实例名称“counter_int”的影片剪辑中,目标movieclip实例名称“win_message”也分别位于根级别。
在使用下面的listener / function和if语句方法之前,这很有效,并且'win_message'movicelip在'counter_int'中输入一个包含相同as3的新帧时减少了侦听器和if语句。 / p>
所有仍然有效,除了它仍然与目标movicelip通信,因为它,'win_message'movieclip在第2帧停止,而不是继续播放。没有停止();目标动画片段中的命令,而不是第1帧btw。
addEventListener(Event.ENTER_FRAME, success);
function success(ev : Event) : void
{
if (linked_total.text == (5).toString () )
{
Object(root).win_message.gotoAndPlay(2);
}
}
任何帮助将不胜感激!如果我不善于解释我的问题,请道歉!
由于
答案 0 :(得分:2)
您的问题是因为您在gotoAndPlay()
事件的侦听器内使用Event.ENTER_FRAME
,因此在条件为false之前重复调用它。
虽然这样做的方式不好,但您可以使用任何准时动作(按钮点击,文本字段更改......),您知道这些动作将在您的用户需要时执行。
如果由于任何其他原因仍然需要使用Event.ENTER_FRAME
事件监听器,您应该确保您的条件只有一次(或者至少会调用gotoAndPlay()
一次),然后你可以使用gotoAndPlay()
var来调用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);
}
}
您还可以在条件第一次为true时删除事件侦听器,但在这种情况下,我不知道您将使用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);
}
}
......为了避免你的行为,有很多方法可以达到你想要的目的。
希望可以提供帮助。