使用TweenMax更改单个动画片段的帧速率

时间:2013-03-04 17:51:33

标签: actionscript-3

我的目标是通过可点击控件(慢/中/快)改变我个人(循环)电影剪辑的帧速率。我听说不可能通过as3 / flash单独实现这一点,所以我尝试过greensock的TweenMax ......但是我似乎无法弄清楚如何做到这一点。有人可以提供帮助吗?

box1.addEventListener(MouseEvent.MOUSE_DOWN, box1down);
function box1down(event:MouseEvent):void {

//FRAMERATE CODE HERE

}

非常感谢!

2 个答案:

答案 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仅在每隔一帧被调用,所以动画似乎以半速运行。