如果AS3中的声明不起作用

时间:2011-11-25 20:22:25

标签: actionscript-3 if-statement

这是对根上的框架的一个if。我想从第2帧循环 Carrera (一个lenghthy movieclip)回到第1帧。(用于测试目的)

这是代码:

if (MovieClip(root).Carrera.currentFrame==2){
   MovieClip(root).Carrera.gotoAndPlay(1);
}

MovieClip 继续,忽略if语句。 我正在做什么工作?

3 个答案:

答案 0 :(得分:2)

if语句没有错误,只是在您预期的时候没有被评估。

当您在框架中放置代码时,它会立即执行,在输入该框架时执行。因此,当第一帧开始时,执行if,其条件为假。它永远不会被重新执行,因为你永远不会告诉它。 AS3中没有“常规订单”; - )

相反,您可以通过添加事件侦听器来检查每一帧:

addEventListener(Event.ENTER_FRAME, function (e) {
    if (MovieClip(root).Carrera.currentFrame==2){
        MovieClip(root).Carrera.gotoAndPlay(1);
    }
});

或者,您可以将gotoAndPlay(1);放在Carrera的第二帧(不是根)上。

答案 1 :(得分:2)

您必须了解您只运行此if语句一次。即使Carrera剪辑在该精确时刻处于第2帧,剪辑也将跳转到播放1并继续播放 - 没有任何东西可以让它再次跳转,因此永远不会有循环。

为了使其正常工作,您必须反复运行同一个语句 - 每次剪辑跳转到新帧时。

例如,您可以通过以下方式执行此操作:a)将此脚本附加到Carrera剪辑的第2帧 <(>)(不是根目录!):

gotoAndPlay(1);

或b)向其添加事件监听器:

MovieClip(root).Carrera.addEventListener (Event.ENTER_FRAME, 
    function ( ev:Event ) : void {
        var cl:MovieClip = ev.target as MovieClip;
        if (cl.currentFrame == 2) cl.gotoAndPlay(1);
    }

还有很多方法可以做到这一点,但除非你要做的事情比不时跳到框架更复杂,我建议你去寻找第一个选项 - 看来你应该学习更多关于ActionScript的内容在尝试事件监听器之前。

答案 2 :(得分:0)

要测试的东西......

是否在执行点定义了MoveClip(root)?

是否在执行点定义了MoveClip(root).Carrera?

是MovieClip(root).Carrera正在播放(或者你叫它停在它上面所以它只是在第1帧中坐着?