2015-10-05 33 views
0

以下as3位于根级别实例名称'counter_int'的影片剪辑内,并且目标影片剪辑实例名称'win_message'也位于根级别。gotoAndPlay的作品,但停止而不是戏剧? - as3

在使用下面的侦听器/函数和if语句方法之前,这个工作很完美,并且在'counter_int'中输入一个新的帧,其中包含相同的as3,减去侦听器和if语句时,'win_message'movicelip播放良好。

所有仍然工作,除了它仍然与有针对性的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); 
    } 
} 

任何帮助将不胜感激!道歉,如果我不擅长解释我的问题!

感谢

回答

2

你的问题,是因为你使用Event.ENTER_FRAME事件监听器里的gotoAndPlay(),因此它一再呼吁,直到条件为假。

虽然这样做不好,但您可以使用任何准时动作(按钮单击,文本字段更改...),您知道这些动作只会在用户需要时执行。

如果你还需要,任何其他理由,使用Event.ENTER_FRAME事件监听器,你应该确保你的条件将是真正的只有一次(或者至少你会打电话给gotoAndPlay()一次),那么你可以调用gotoAndPlay(),通过使用Boolean VAR例如:

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); 
    } 
} 

......真的有很多方式来完成你想要的,避免你得到的行为。

希望能有所帮助。

+0

谢谢akmozo。原谅我的无知。我很快尝试将这两个as3碎片粘贴到(而不是我目前的as3)中,并且没有运气。我可能需要更多的“手握”来说实话! – spumker

+0

@spumker对不起,我在我的代码中犯了一个错误,它是'int(linked_total.text)== 5'而不是'int(linked_total.text)= 5';)再次抱歉。试试看,告诉我你得到了什么。 – akmozo

+0

再次感谢akmozo,现在完美! – spumker