2013-03-04 218 views
0

我的目标是通过可点击的控件(慢/中/快)来更改我的单个(循环)影片剪辑的帧速率。我听说不可能通过as3/flash单独实现这一点,所以我尝试了绿色环保的TweenMax ......但我似乎无法弄清楚如何做到这一点。有没有人可以帮忙?用TweenMax更改单独的动画片段的帧速率

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

//FRAMERATE CODE HERE 

} 

非常感谢!

回答

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事件处理程序。

我还没有测试过这个代码,因此在每次迭代结束时你可能需要一个gotoAndStop(1)

+0

感谢您的帮助:)我想我有更多的学习要做,这仍然是我很难理解的难!我非常感谢帮助,虽然... – Dan434 2013-03-04 21:09:13

+0

GOT IT ...谢谢你,好主意。 – Dan434 2013-03-05 00:16:48

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只叫每隔一帧动画将在半速运行。

+0

感谢您的支持。虽然我不确定我完全理解。这是否意味着它会跳过帧,造成它以一半速度运行的错觉? – Dan434 2013-03-04 18:08:55

+1

不,它不会跳过帧。每个单帧都会调用一个基本的'ENTER_FRAME'监听器,所以每一帧调用movieclips'nextFrame()'函数就相当于调用'play()',它将以正常速度运行。如果您每隔一帧调用'nextFrame()',如上所述,它仍然会播放动画片段的每一帧,但是当发生“ENTER_FRAME”时,它不会进入动画片段的下一帧,而只会每进行一次“ENTER_FRAME” '发生。 – 2013-03-05 09:54:31

+0

哦,明白了。感谢解释:) – Dan434 2013-03-05 23:29:55