对不起,这是如此具体,但我已经梳理了很多页面,视频和教程,无法弄清楚这一点。
我在MovieClip中拥有所有动画。在影片剪辑中也是一个舞台大小的白色方形按钮,实例名称为“btn”。回到主舞台上,我有一个名为“actions”的第二层,下面的代码应用于第一个(也是唯一一个)帧。它不起作用。完全没有。 (巨大的)tia
stop(); // this will stop the movie from playing at the start
btn.addEventListener((MouseEvent.ROLL_OVER, playMovie);
btn.addEventListener((MouseEvent.ROLL_OUT, stopMovie);
function playMovie(evt:MouseEvent):void {
play();
}
function stopMovie(evt:MouseEvent):void {
stop();
}
答案 0 :(得分:2)
问题是当你说play();
或stop();
你真正指挥哪个对象时?您的playMovie
函数理论上可用于以不同方式同时控制多个MovieClip,因此请特定于您的命令......
btn.play(); //start the playback of "btn" MC
btn.stop(); //stop the playback of "btn" MC
另请考虑使用MOUSE_OVER
/ OUT
而不是ROLL_OVER
/ OUT
等,但任何适用于您的事情。
对于倒车,您将btn.prevFrame();
与ENTER_FRAME
事件功能一起使用。此功能读取FPS的文档设置。例如,如果您设置30帧/秒,那么您在事件函数中放置的任何指令将每秒处理30次。
有关撤消MovieClip播放的建议,请参阅此其他Answer
。
答案 1 :(得分:1)
@ VC.One 对于如何解决问题是正确的,但是为了回应您对他们的答案的评论,我想我会演示如何为您完全实现这一点 - 他们没有。
var removeUpdate = false;
btn.addEventListener(MouseEvent.MOUSE_OVER, playMovie);
btn.addEventListener(MouseEvent.MOUSE_OUT, stopMovie);
function playMovie(evt:MouseEvent):void {
// Stop rewinding the movie clip and play it
if(removeUpdate){
stage.removeEventListener(Event.ENTER_FRAME, update);
removeUpdate = false;
}
// play our button
btn.play();
}
function stopMovie(evt:MouseEvent):void {
// stop our button
btn.stop();
// ... and rewind it
stage.addEventListener(Event.ENTER_FRAME, update);
removeUpdate = true;
}
function update(evt: Event){
// moves the button movie clip backwards one frame.
btn.prevFrame();
// If we have finished rewinding the movie clip, then stop
if(btn.currentFrame == 1){
stage.removeEventListener(Event.ENTER_FRAME, update);
removeUpdate = false;
}
}
删除更新事件非常重要,因为如果不这样做,电影将永远不会再播放,因为它将向前移动一帧,然后每帧再次返回; btn.play(); btn.prevFrame();