【问题标题】:Actionscript - Loop until mouseover then goto frame xActionscript - 循环直到鼠标悬停然后转到帧 x
【发布时间】:2009-12-21 14:51:46
【问题描述】:

我一直试图让它工作一段时间。我有 25 帧要循环播放,但是在鼠标悬停时我希望它跳到第 26 帧并继续。有什么建议吗?

Actionscript 2 或 3 没问题...

【问题讨论】:

    标签: flash actionscript-3 actionscript-2


    【解决方案1】:

    如果您想完全避免使用时间线,您可以使用 ENTER_FRAME 处理程序检查每一帧的 currentFrame,也可以使用 addFrameScript() 方法:

    var isIdle : Boolean = true;
    
    var loopIfIdle: Function = function() : void
    {
      if (isIdle)
        mc.gotoAndPlay(1);
    };
    
    mc.addFrameScript(24, loopIfIdle);
    mc.addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
    
    
    // The mouse handler:
    function handleMouseOver(ev : MouseEvent) : void
    {
      isIdle = false;
    }
    

    本质上,这里发生的是声明了一个布尔变量,该变量将用于指示 Flash 阶段是否已经交互(悬停)。使用闭包(一种在其周围范围内继承变量的方法),我们创建了 loopIfIdle 函数,该函数将可以访问此标志。

    addFrameScript() 与在 Flash CS3/CS4 时间轴中的帧上添加代码或多或少完全相同。因此,每次播放头经过第 25 帧时都会执行 loopIfIdle 函数。但是现在,因为我们使用的是闭包,所以我们可以检查 isIdle 标志的状态从框架脚本中。

    MOUSE_OVER 事件处理程序会将 isIdle 设置为 false,以指示舞台已悬停。这意味着下次调用 loopIfIdle 时,它不会循环(即移回第 1 帧),从而达到您想要的效果。

    更简单的解决方案是在 MOUSE_OVER 处理程序中简单地 gotoAndPlay(26),并忽略整个帧脚本和 isIdle 标志方法。但是,这并不能保证从循环到第 26 帧的平滑过渡(想象一下,如果鼠标在第 1 帧进入舞台,然后会直接跳到第 26 帧。)根据您的要求,这可能仍然是一个不错的选择。

    【讨论】:

    • 嗯,如果我想要第二个建议,使用 gotoAndPlay(26),我会怎么做。请原谅我的无知,这是我第一次搞乱actionscript。
    • 删除所有内容,包括包含 addFrameScript() 的行。只留下 MouseEvent 处理代码。然后在handleMouseOver中,只需执行mc.gotoAndPlay(26)。
    • 那么脚本如何知道循环呢?
    • 如果您使用时间线,只需将 gotoAndPlay(1) 放在第 25 帧上。或者,如果您愿意(或无权访问时间线),也可以使用 addFrameScript()。在这种情况下,只需跳过有关 isIdle 的部分即可。
    • 好的,它正在循环播放,我的脚本设置如下: mc.addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver); // 鼠标处理程序: function handleMouseOver(event : MouseEvent) : void { MovieClip(thevideo).gotoAndPlay(107); } 但鼠标悬停不起作用,也没有错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多