我的目标是通过可点击控件(慢/中/快)改变我个人(循环)电影剪辑的帧速率。我听说不可能通过as3 / flash单独实现这一点,所以我尝试过greensock的TweenMax ......但是我似乎无法弄清楚如何做到这一点。有人可以提供帮助吗?
box1.addEventListener(MouseEvent.MOUSE_DOWN, box1down);
function box1down(event:MouseEvent):void {
//FRAMERATE CODE HERE
}
非常感谢!
答案 0 :(得分:2)
以下是TweenMax的API文档:http://www.greensock.com/as/docs/tween/com/greensock/TweenMax.html
如果您要控制多个动画片段,则可以创建一个具有所需功能的抽象类并扩展该类。如下所示:
public class ControlledMovieClip extends MovieClip {
public function ControlledMovieClip() {
stop();
}
public function animate(frameRateInSeconds:Number):void {
TweenMax.to(this, frameRateInSeconds, { frame: this.totalFrames - 1, repeat: -1, ease: Linear.easeNone });
}
}
让所有循环的动画片段扩展到该类,然后您可以在box1down
事件处理程序中的对象上调用animate函数。
我没有测试过该代码,所以在每次迭代结束时可能需要gotoAndStop(1)
。
答案 1 :(得分:1)
仅通过Actionscript就可以让你自己处理帧进展(而不是使用mc.play()来停止movieclip并自己调用nextFrame())。
让我们说Movieclip(myMC)有20帧动画。要以正常速度手动运行动画,只需在项目的每一帧上调用myMC.nextFrame();
(例如,使用ENTER_FRAME
侦听器)。
要让动画以半速运行,您可以使用帧数和帧触发器:
var frameTick = 0;
var frameAnimTrigger = 2;
function Update(e:Event):void
{
frameTick++;
if(frameTick == frameAnimTrigger)
{
myMC.nextFrame();
frameTick = 0;
}
}
因为nextFrame
仅在每隔一帧被调用,所以动画似乎以半速运行。