我一直试图让它工作一段时间。我有25帧我想循环,但在鼠标悬停时我希望它跳到第26帧并继续。有什么建议吗?
动作脚本2或3很好......
答案 0 :(得分: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)。根据您的要求,这可能仍然是一个不错的选择。 / p>