【はじめてのプチコン】ゲームループと時間の関係 | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。

チェックポイント
今までゲームループの中でキャラが一度ずつ実行されています。この単位をタスクと呼んでいますが、では具体的にはどういうものかというと…

一般的な多くのゲーム機の場合1秒間に60回ほど画面を描画しゲームを実行しています。
これを通常60fpsといいます。
fpsとはフレーム・パー・セカンドの意味です。
1秒間に描画する画面数のことです。
今までプログラム中に使用していたVSYNCは垂直ブランキング同期というもので1秒間に60回発生します。
この垂直ブランキングをゲーム内の時間の基準として使用しているのです。
実際にそれを確かめるためにサンプルプログラムを作りました。
実行してみてください。


■プログラム
0001 ' V-Blanking Sync test
0002 C = 0
0003 S = 0
0004 CLS
0005 @LOOP
0006 VSYNC 1
0007 C = C + 1
0008 IF C != 60 GOTO @LOOP
0009 C = 0
0010 S = S + 1
0011 LOCATE 0, 0
0012 PRINT S
0013 GOTO @LOOP



プログラムの解説です。

0002 C = 0
0003 S = 0

C はカウンタです。0を代入し初期化しています。
S はセカンド…要するに秒数です。これも0で初期化してあります。

0004 CLS

画面を初期化します。

0005 @LOOP
0006 VSYNC 1

ゲームループの同期を行います。
この部分が画面の垂直同期を待ちゲームループの最初を認識する方法です。

0007 C = C + 1
0008 IF C != 60 GOTO @LOOP
0009 C = 0

ゲームループは1秒間に60回なので C に1ずつ足し60になったら1秒ということですよね?
1秒になっていないならゲームループの同期へジャンプします。
60回になっていれば1秒たったことになります。
再度次の60回をクントするために C は0で初期化します。

0010 S = S + 1

60カウントで1秒たったことになるので S に1を加えます。
この S の内容が進んだ時間(秒数)となります。

0011 LOCATE 0, 0
0012 PRINT S
0013 GOTO @LOOP

画面0,0の位置に経過した秒数を表示します。
そのあとまたゲームループ同期へジャンプします。

これを実行すると画面に秒数が表示されます。
大体1秒おきに表示されていると思います。

ただ!!
実際の時間より若干長いんです。本当は^^;
そこは誤差としておいてください。

サンプルで作ってるゲームにはSYS_CNTという変数があります。
実はこっそりシステムが時間を管理するためにカウントを行っています。