[AS3] タイムベースでレンダリング

| コメント(0) | トラックバック(0) |
このページのFlashですが、キャラクターをちょこまか動かすということをしているので、
今回普通のレンダリングではなくタイムベースでのレンダリングというものを試してみました。

本「ActionScript3アニメーション」で紹介されていたテクニックですが、こういうコンテンツの場合はかなり有効的ですね。flashの世界では常識的なのかな。。自分はかなり目から鱗でした。



タイムベースがどんなものかというと、


普通オブジェクトを移動させようとした場合、enterframeで1フレームづつ値を足していって移動させたりするわけですが、そうすると処理が重くてfps値が下がった時は、1フレームの処理自体に時間がかかってしまうため、モーションの移動が遅くなってしまいます。
なので「1秒間にこのくらい移動させたい」というような目的の場合にはちょっと不安です。

タイムベースは、enterframe1処理の前後でかかった時間を求めて、それに基づいた移動距離などを計算に加えるため、fpsの値に左右されずにモーションを作ることが出来ます。
もし処理が重たくなってしまってもモーションの移動間隔がその分大きくなって飛び飛びになるだけで、移動にかかる時間は変わりません。逆に処理が軽ければ滑らかな動きになります。



そんなこんなでやり方ですが、
entarframe内で↓のような処理を書きます。
-----------------------------------------------------------
private var time;
private function onEnterFrameHandler(e){
var elapsed:Number = getTimer() - time;
time = getTimer();
}
-----------------------------------------------------------
これでフレーム間でかかった時間が割り出せるので、あとは移動の処理に
このelapse/1000(1000で割ると1秒間の移動距離として計算できます)を値に乗算すればOKです。
このやり方でやる場合、初期fps値はとりあえず100fpsぐらいの設定にしておきます。



と、こんな感じでこのflashでも試してみました。
よかったらprofilerを入れているので、右クリック Show Profilerでfps値を見ながらキャラクターを動かしていじってみてください。
fps値次第でキャラクターが飛び飛びだったり、滑らかだったりしますお。

トラックバック(0)

トラックバックURL: http://collamo.jp/mt/mt-tb.cgi/53

コメントする

About

  • Name : collamo
  • Work : WebDevelop, WebDesign, FlashDevelop, Illustration(趣味)
  • Place : Tokyo
  •  
  • Mail : info@collamo.jp