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() を自分で呼び出します)。

ムービークリップ (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は 1 フレームおきにしか呼び出されないため、アニメーションは半分の速度で実行されているように見えます。

于 2013-03-04T17:58:30.920 に答える