Actionscript 3 更改单个电影剪辑';TweenMax的s帧速率
我的目标是通过可单击的控件(慢速/中速/快速)更改单个(循环)电影剪辑的帧速率。我听说单靠as3/flash是不可能做到这一点的,所以我试过greensock的TweenMax。。。然而,我似乎不知道如何做到这一点。有人能帮忙吗Actionscript 3 更改单个电影剪辑';TweenMax的s帧速率,actionscript-3,Actionscript 3,我的目标是通过可单击的控件(慢速/中速/快速)更改单个(循环)电影剪辑的帧速率。我听说单靠as3/flash是不可能做到这一点的,所以我试过greensock的TweenMax。。。然而,我似乎不知道如何做到这一点。有人能帮忙吗 box1.addEventListener(MouseEvent.MOUSE_DOWN, box1down); function box1down(event:MouseEvent):void { //FRAMERATE CODE HERE } 非常感谢 仅通过A
box1.addEventListener(MouseEvent.MOUSE_DOWN, box1down);
function box1down(event:MouseEvent):void {
//FRAMERATE CODE HERE
}
非常感谢 仅通过Actionscript是可能的,它只需要您自己处理帧进程(而不是使用mc.play(),您可以停止movieclip并自己调用nextFrame() 假设一个Movieclip(myMC)有20帧动画。要以正常速度手动运行动画,只需调用
myMC.nextFrame()在项目的每一帧上使用code>(例如,使用ENTER\u frame
listener)
要使动画以半速运行,可以使用帧计数和帧触发器:
var frameTick = 0;
var frameAnimTrigger = 2;
function Update(e:Event):void
{
frameTick++;
if(frameTick == frameAnimTrigger)
{
myMC.nextFrame();
frameTick = 0;
}
}
因为只每隔一帧调用一次nextFrame
,动画似乎以半速运行。仅通过Actionscript是可能的,它只需要您自己处理帧进度(而不是使用mc.play(),您停止movieclip并自己调用nextFrame()
假设一个Movieclip(myMC)有20帧动画。要以正常速度手动运行动画,只需调用myMC.nextFrame()在项目的每一帧上使用code>(例如,使用ENTER\u frame
listener)
要使动画以半速运行,可以使用帧计数和帧触发器:
var frameTick = 0;
var frameAnimTrigger = 2;
function Update(e:Event):void
{
frameTick++;
if(frameTick == frameAnimTrigger)
{
myMC.nextFrame();
frameTick = 0;
}
}
由于只每隔一帧调用一次下一帧,因此动画似乎以半速运行。以下是TweenMax的API文档:
如果您有多个要控制的movieclips,您可以创建一个具有所需功能的抽象类并扩展该类。比如:
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 });
}
}
让所有正在循环的movieclip扩展该类,然后可以在box1down
事件处理程序中的对象上调用animate函数
我尚未测试该代码,因此在每次迭代结束时,您可能需要一个gotoAndStop(1)
。以下是TweenMax的API文档:
如果您有多个要控制的movieclips,您可以创建一个具有所需功能的抽象类并扩展该类。比如:
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 });
}
}
让所有正在循环的movieclip扩展该类,然后可以在box1down
事件处理程序中的对象上调用animate函数
我还没有测试该代码,所以在每次迭代结束时,您可能需要一个gotoAndStop(1)
。谢谢。但我不确定我是否完全理解。这是否意味着它将跳过帧,产生以一半速度运行的错觉?不,它不会跳过帧。基本的ENTER\u FRAME
侦听器在每一帧都被调用,因此在每一帧调用movieclipsnextFrame()
函数相当于只调用play()
,它将以正常速度运行。如果您每隔一帧调用一次nextFrame()
,如上所述,它仍会播放movieclip的每一帧,但当ENTER\u frame
发生时,它不会前进到movieclip的下一帧,而只会每隔一次ENTER\u frame
发生一次。谢谢。但我不确定我是否完全理解。这是否意味着它将跳过帧,产生以一半速度运行的错觉?不,它不会跳过帧。基本的ENTER\u FRAME
侦听器在每一帧都被调用,因此在每一帧调用movieclipsnextFrame()
函数相当于只调用play()
,它将以正常速度运行。如前所述,如果每隔一帧调用一次nextFrame()
,它仍会播放movieclip的每一帧,但是当ENTER\u frame
发生时,它不会前进到电影剪辑的下一帧,它只会每隔ENTER\u frame
发生一次才前进。谢谢你的帮助:)我想我还有很多东西要学,这对我来说还是很难理解!我真的很感谢你的帮助……谢谢你的帮助:)我想我还有很多东西要学,这对我来说还是很难理解!我真的很感谢你的帮助。。。