テクニック集/「タイマーベース動作」について

Last-modified: 2011-09-13 (火) 02:14:26

フレームプロパティにある「タイマーベース動作」についてようやく分かってきたので改めてまとめ直します。

 

「タイマーベース動作」はオブジェクトをタイマーベース(タイマー依存)で動作させるようにして、アプリケーションのフレームレートが変動しても、オブジェクトの動作速度を「タイマーベース動作」で設定したレートで移動した時の速度に維持する機能です。
(「タイマーベース動作」のレートよりアプリのフレームレートが低くなった場合は、移動量を増やして、逆にアプリのフレームレートが「タイマーベース動作」のレートより高い場合は移動量を減らして遅くする。)

 

以下のサンプルを確認してください。

 

アプリケーションの「フレームレート」を50に設定。
フレームの「タイマーベース動作」をONにして設定値は同じく50に設定。

 

まずはこの状態で実行して、オブジェクトが右端に移動した時のフレームカウントとストップウォッチの値を覚えておきましょう。
次に、アプリケーションのフレームレートを半分の25に変更して実行してみてください(タイマーベースの設定はそのまま)。

 

2つの結果を比べてみると、フレームカウントはフレームレートの変更に伴って増加量が減っていますが、タイマーベースの経過時間であるストップウォッチの値は、どちらも同じ値で止まったはずです。

 

似た機能にアプリケーションプロパティの「マシン速度に依存しない」というオプションがありますが、これとの違いは、
こちらは処理落ちを起こしてフレームレートが下がった時にアニメーションや動作の滑らかさを犠牲にして「フレームレートを稼ぐ」機能ですが、
一方の「タイマーベース動作」は「フレームレートは稼がずにオブジェクトの動作のみを合わせる」機能です。

 

このため、イベントにフレームベースで動作するイベント(例:常に実行で変数を増加させ、その変数が一定値になったら実行されるイベント等)が含まれていると、フレームカウントの間隔は処理落ちで下がっているのに、オブジェクトの動作速度はタイマーベースとなって変わらないので(タイマーは処理落ちに関係がない)、この差によって進行に大きな影響を及ぼす恐れがあります。

 

逆に、フレームベースのイベントが一切使われていなくて、全てタイマーで制御されている場合は、処理落ちをしてもタイミングがフルフレームで動作した時と変わらないようにすることが出来ます。

 

しかし、全てのイベントをタイマーベースにするのは現実的に難しいと思いますので、やはり今まで言われてきた通り、「タイマーベース動作」はOFFにしてフレームベースで作った方が余計な混乱が生じなくて良いと思います。

コメント