等速ループ

アクションや、シューティングなどのゲームをパソコンで作る時、「ユーザーと自分のパソコンの処理能力には違いがある。」ということを頭に入れておく必要があります。これを頭に入れないで、自分のパソコンを基準に作ると「速すぎてゲームにならない。」または、「遅すぎてゲームにならない。」ということが起こり得ます。

そこで、今回は「Waitを使い、推奨環境以上で等速ループさせる。」方法を紹介しましょう。
まず、下のようなスクリプトを考えてみましょう。

repeat
  ・・・--処理1
  ・・・
  ・・・--処理N
end repeat
上のプログラムが速すぎるので、処理Nの次にWaitを入れようと思います。
ここで、まず考えなければいけないのが、「処理1〜処理N」にかかる時間です。
「A君のパソコンでは、5 ticks、B君のパソコンでは、1 ticks」ということがあるのです。
つまり、処理Nの後に「wait 3」を入れた時、1ループにかかる時間は、「A君は、5+3 ticks、B君は1+3 ticks」になります。
これでは、機種によって難易度が変わるゲームになってしまい、ゲームになりません。
そこで、「wait 整数」は使わず、「wait until ・・・(wait while・・・)」で、処理しましょう。
こんな感じです。
repeat
  put ticks() into FirstTime
  ・・・--処理1
  ・・・
  ・・・--処理N
  wait until ticks()-FirstTime>=8
end repeat
こうしておけば、「処理1〜処理N」にかかる時間が、8未満であれば、どの環境に持っていっても等速ループになるわけです。
アクションゲームなどを作る際は、試してみて下さい。

使い方

repeat
 put ticks() into FirstTime
 ・・・・
 ・・・・
 ・・・・
 wait until ticks()-FirstTime>=@
end repeat

@:1ループにかける時間

Takuya風HyperCardゲーム処理 TOPへ