这是一个如果在根上的一个框架上的statern。我想环卡雷拉(一个lenghthy的movieclip)从框架2回框架1(用于测试目的)如果AS3中的语句无法正常工作
这是代码:
if (MovieClip(root).Carrera.currentFrame==2){
MovieClip(root).Carrera.gotoAndPlay(1);
}
的movieclip 不断去,忽略if语句。 我在做什么?
这是一个如果在根上的一个框架上的statern。我想环卡雷拉(一个lenghthy的movieclip)从框架2回框架1(用于测试目的)如果AS3中的语句无法正常工作
这是代码:
if (MovieClip(root).Carrera.currentFrame==2){
MovieClip(root).Carrera.gotoAndPlay(1);
}
的movieclip 不断去,忽略if语句。 我在做什么?
当你指望它有与if
说法没有错误,它只是不被评估是。
当您将代码放在一个框架,它就会马上执行,当帧是进入。所以,第一帧开始时,执行if
,其条件是当时错误的。而它永远不会被重新执行,因为你永远不会告诉它。在AS3中没有“常规”这样的东西;-)
取而代之的是,你可以通过添加一个事件监听器检查每一个框架:
addEventListener(Event.ENTER_FRAME, function (e) {
if (MovieClip(root).Carrera.currentFrame==2){
MovieClip(root).Carrera.gotoAndPlay(1);
}
});
或者,您可以只需将gotoAndPlay(1);
卡雷拉的第二帧(不是根)上。
需要测试的东西...
是否在执行时定义了MoveClip(root)?
是MoveClip(根).Carrera在执行的时候定义?
是影片剪辑(根).Carrera打(或者你就可以叫停,所以它的框架只是呆坐着1?
你要明白,你正在运行这个if语句只一次。即使Carrera剪辑在该时刻处于第2帧,该剪辑将跳转到播放1并继续播放 - 没有什么可以让它再次跳转,因此永远不会有循环。
为了这个工作,你必须一次又一次地运行相同的语句 - 每个剪辑跳转到一个新的帧的时间。
例如,可以通过一个为此)附加此脚本到帧卡雷拉剪辑(不是根的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的知识尝试事件监听器。
谢谢,我现在明白了,我一直在玩功能,我完全忘记了ENTER_FRAME,我能够解决它。 –
很好的解释,我有一堆影片剪辑打电话给对方,现在我有一个单一的AS3框架呼吁所有的人都用funtions,感谢这个节省时间! –
@加布里埃尔:很高兴能帮到你!您可能需要考虑使用文档类(外部文件),而不是将所有代码放在框架上 - 这使得更容易遵循。 – Cameron