【发布时间】:2009-12-21 14:51:46
【问题描述】:
我一直试图让它工作一段时间。我有 25 帧要循环播放,但是在鼠标悬停时我希望它跳到第 26 帧并继续。有什么建议吗?
Actionscript 2 或 3 没问题...
【问题讨论】:
标签: flash actionscript-3 actionscript-2
我一直试图让它工作一段时间。我有 25 帧要循环播放,但是在鼠标悬停时我希望它跳到第 26 帧并继续。有什么建议吗?
Actionscript 2 或 3 没问题...
【问题讨论】:
标签: flash actionscript-3 actionscript-2
如果您想完全避免使用时间线,您可以使用 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 帧。)根据您的要求,这可能仍然是一个不错的选择。
【讨论】: