如何播放动画,然后在悬停时反向播放,再次开始播放,直到在 Adob​​e Animate (Flash) 中使用悬停结束?

Posted

技术标签:

【中文标题】如何播放动画,然后在悬停时反向播放,再次开始播放,直到在 Adob​​e Animate (Flash) 中使用悬停结束?【英文标题】:How to play animation and then play reverse on hover, start playing again until end on hover out using in Adobe Animate (Flash)? 【发布时间】:2017-06-08 17:08:31 【问题描述】:

抱歉,这太具体了,但我浏览了很多页面、视频和教程,但无法弄清楚。

我的所有动画都包含在一个 MovieClip 中。在影片剪辑中还有一个舞台大小的白色方形按钮,实例名称为“btn”。回到主舞台,我有一个名为“动作”的第二层,下面的代码应用于第一个(也是唯一一个)帧。它不工作。完全没有。 (巨大的)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();

【问题讨论】:

【参考方案1】:

问题是当你说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 次。

请参阅其他Answer,了解有关反转影片剪辑播放的建议。

【讨论】:

+1 这是实现这一目标的最佳方式。 @VCOne如果您想更改动画的速度,您也可以使用与布尔值关联的计时器并使用 nextFrame 和 prevFrame 。在这种情况下不要忘记 updateAfterEvent。 所以我理解了这些回复的 50%。我将代码更新为此,但不知道如何将 preFrame 部分放在一起。我很抱歉'stop(); // 这将在开始时停止播放电影btn.addEventListener((MouseEvent.ROLL_OVER, playMovie); btn.addEventListener((MouseEvent.ROLL_OUT, stopMovie); function playMovie(evt:MouseEvent):void play(); function stopMovie(evt:MouseEvent):void stop(); 【参考方案2】:

@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();

【讨论】:

以上是关于如何播放动画,然后在悬停时反向播放,再次开始播放,直到在 Adob​​e Animate (Flash) 中使用悬停结束?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Adob​​e Animate 中悬停时反向播放动画?

鼠标悬停播放声音

我需要在css中有两个动画,一个在开始,一个在悬停,但它不起作用

为啥我的 SVG 'frame' 动画没有在悬停时播放?

冻结动画/防止悬停的回调动画播放

悬停时播放 CSS 动画,悬停时暂停