イメージを60枚作って順番に表示していきます。
これを丁度1秒間でループするように制御します。
1/60秒待つを挟んでループするだけで簡単にできそう?
いや、できないんです。
針がぐるぐるする60枚の画像。針が1周するのに1867ミリ秒かかった。
実験
まず針の画像60枚を用意します。
素材[r]をイメージとして作成
して6度ごとに線を引きます。
//部品
素材とは変数
塗スタイルは「透明」
rを0から59まで繰り返す
素材[r]をイメージとして作成
素材[r]→サイズは「0,0,200,200」
素材[r]→可視はオフ
素材[r]を画面クリア
素材[r]の0,0から200,200へ円
x=100+COS(ラジアン変換(360/60*r-90))*100
y=100+SIN(ラジアン変換(360/60*r-90))*100
素材[r]の100,100からx,yへ線
時計の針のような画像が素材[r]に60枚用意できました。
これを「1/60秒待つ」をはさんでループを回してみます。
表イメージとはイメージ
その位置は「0,0」
1でループ
rを0から59まで繰り返す
表イメージの画像は素材[r]→名前 //動的作成した場合は名前を参照する
1/60秒待つ //←待つ
結果は……一周1867ミリ秒と、少しゆっくり。
これを一周1000ミリ秒にするのが目的です。
まず最速を目指す
「待つ」を短くしたらどうなるでしょうか。
「0秒待つ」としてみましょう。
(単に消すと無限ループになり、0秒待つとちゃんと描画更新されます)
表イメージとはイメージ
その位置は「0,0」
1でループ
rを0から59まで繰り返す
表イメージの画像は素材[r]→名前
0秒待つ //←ここ
結果は……一周934ミリ秒といいところ。
でも何の制御にもなってないし、環境で変わりそうなので参考記録とします。
描画処理反映
0秒待つの代わりに「描画処理反映」を挟んでみます
表イメージとはイメージ
その位置は「0,0」
1でループ
rを0から59まで繰り返す
表イメージの画像は素材[r]→名前
描画処理反映 //←ここ
結果は……一周37~40ミリ秒と非常に高速。
速すぎて残像が見える速度です。
これに制御を入れていきます。
制御する
システム時間(ミリ秒単位で取得)を使って今表示すべき画像を割り出していきます。
システム時間の下三桁をとってきて0~999ミリ秒を取り出し、60個に分割。
1000ミリ秒で60枚なので、1枚16.67ミリ秒。
0~16ミリ秒なら素材[0]を表示
17~33ミリ秒なら素材[1]を表示
34~50ミリ秒なら素材[2]を表示……となるように素材[r]のrを計算します
表イメージとはイメージ
その位置は「0,0」
1でループ
下三桁=システム時間%1000
r=INT(下三桁/(1000/60)) //←ここ
表イメージの画像は素材[r]→名前
描画処理反映
結果は……1周1001ミリ秒!
システム時間からrを求めている部分では、ループ中に同じ画像が連続で表示されることもあれば一つ飛ばすこともあると思います。
番外編
GIFアニメは10ミリ秒単位でのみ表示間隔を変えられるそうです。
秒間60枚は無理そう。
なでしこのアニメ部品も同じような感じ。
微妙な間隔は設定できないみたいです。