0

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

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

//FRAMERATE CODE HERE

}

非常感谢!

4

2 回答 2

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)在每次迭代结束时使用。

于 2013-03-04T20:07:34.313 回答
1

仅通过 Actionscript 就可以实现,它只需要您自己处理帧进程(而不是使用 mc.play() 来停止影片剪辑并自己调用 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仅每隔一帧调用一次,动画似乎以半速运行。

于 2013-03-04T17:58:30.920 回答