Actionscript 3 更改单个电影剪辑';TweenMax的s帧速率

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

我的目标是通过可单击的控件(慢速/中速/快速)更改单个(循环)电影剪辑的帧速率。我听说单靠as3/flash是不可能做到这一点的,所以我试过greensock的TweenMax。。。然而,我似乎不知道如何做到这一点。有人能帮忙吗

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

//FRAMERATE CODE HERE

}

非常感谢

仅通过Actionscript是可能的,它只需要您自己处理帧进程(而不是使用mc.play(),您可以停止movieclip并自己调用nextFrame()

假设一个Movieclip(myMC)有20帧动画。要以正常速度手动运行动画,只需调用
myMC.nextFrame()(例如,使用
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()(例如,使用
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
侦听器在每一帧都被调用,因此在每一帧调用movieclips
nextFrame()
函数相当于只调用
play()
,它将以正常速度运行。如果您每隔一帧调用一次
nextFrame()
,如上所述,它仍会播放movieclip的每一帧,但当
ENTER\u frame
发生时,它不会前进到movieclip的下一帧,而只会每隔一次
ENTER\u frame
发生一次。谢谢。但我不确定我是否完全理解。这是否意味着它将跳过帧,产生以一半速度运行的错觉?不,它不会跳过帧。基本的
ENTER\u FRAME
侦听器在每一帧都被调用,因此在每一帧调用movieclips
nextFrame()
函数相当于只调用
play()
,它将以正常速度运行。如前所述,如果每隔一帧调用一次
nextFrame()
,它仍会播放movieclip的每一帧,但是当
ENTER\u frame
发生时,它不会前进到电影剪辑的下一帧,它只会每隔
ENTER\u frame
发生一次才前进。谢谢你的帮助:)我想我还有很多东西要学,这对我来说还是很难理解!我真的很感谢你的帮助……谢谢你的帮助:)我想我还有很多东西要学,这对我来说还是很难理解!我真的很感谢你的帮助。。。