setIntervalとenterframeの時間制御のアレコレ
1秒後に○○するというときってありますよね。
僕はいつもsetIntervalで制御するんですが、アニメーションと同期をとらないといけないなどの事情でenterframeで制御するって場合もあるかもしれないです。
そこで、ちょっと気になったので実験してみました。
FlashプレイヤーをDLしてください。
フレームレート 31でファイルをつくり、実験します。
onEnterFrameによる処理の流れは以下です
上記サンプルは「START」を押してから1秒後に押してからの経過時間を表示するサンプルです。
ラジオボタンで「onEnterFrame」か「setInterval」かを選んで「START」を押してみてください。
(違いをわかりやすくするため「START」を押すとストレス用オブジェクトを生成します)
onEnterFrameによる処理の場合、計算などで処理落ちすると1フレームあたりの時間が長くなってしまいます。
そのため、31フレーム経過後は1秒後ではなくなってしまう可能性があります。
アニメーションと同期をとらないといけないなどのやむを得ない場合を除いて、できるだけ正確に経過時間を計測したい時はonEnterFrameではなくsetIntervalを使う方が良さそうです。
といいつつsetIntervalも結構ずれてますね…笑