フレーム
画面スクリプトはシーンスクリプトと同様に、複数のコマンドや計算式を1フレーム内に実行します。
ここでは、どこまでが1フレーム内で処理されるか、またどのタイミングで次フレームまで待つかを説明します。
1)コマンドでのフレーム待ち
// 1 //////////////// logo disp 1 logo blend 0 logo pos @ @+120 wait 1 // 2 //////////////// logo fade 30 0 255 wait // 3 //////////////// bg disp 1 bg_white disp 0 pl[0] wipe 60 title_wipe wait // 4 //////////////// logo arc 60 270 90 0 60 wait // 5 ////////////////
この例の場合、1から2までのコマンドが1フレーム内で実行されます。
同様に、2から3までも1フレーム内で実行されます。
これはシーンスクリプトと同様です。
シーンスクリプトの場合、waitコマンド、文章表示、キー入力待ちのいずれかが行われるまでを1フレームで実行します。
画面スクリプトには文章表示やキー入力待ちは無いので、コマンドによるフレーム待ちはwaitコマンドのみとなります。
※正確には内部処理の都合上、wait以外にもフレーム待ちが起こるコマンドがありますが、明示的にフレーム待ちを指定するコマンドはwaitコマンドのみとなります。
2)ヘッダブロックでのフレーム待ち
#START
pl[0] disp 1
pl[0] fade 60 0 255
next WAIT
#WAIT
if( _CLICK_R_ != 0 )
next QUIT
endif
// ※1
#QUIT
exit 0
next SLEEP
この例では、[START→WAIT→(右クリック待ち)→QUIT]という流れの処理を行っています。
この場合、フレーム待ちは※1に処理が移行した時(WAITブロックが全て処理された時)に発生します。
ヘッダブロック内の処理が全て行われると、nextコマンドを使用しない限り再びそのヘッダブロックの先頭から処理を行いますが、この繰り返しが行われる際に1フレーム待ちます。
nextコマンドでヘッダ移動された場合はフレーム待ちは行われません。
例えば、※1の箇所に next WAIT という1行を追加した場合、
#WAIT if( _CLICK_R_ != 0 )@ next QUIT endif next WAIT // この行を追加しました
(キーが押されていない状態でスタート)
→【キー入力判定】@
→【キーが押された場合】→【next SLEEP によって終了処理へ】
→【キーが押されてない場合】→【endif 以降の処理を実行(この場合は何もない)】
→【next によってヘッダの先頭に戻る】(@に戻る)// この行を追加しました
→【1フレーム待つ】(本来はこの処理になる)
→A【キー入力があればシステム変数が更新される】
→【システム処理によってヘッダの先頭に戻る】(@に戻る)
という流れになります。
キー入力判定は、1フレーム経つまでは更新されません。したがってこのブロックで無限ループして終了できなくなります。