日付・時間の取得やタイマー機能について解説します。
| ||
ゲームをプレイしている、その時の日付や時間を数字変数に代入します。
| ||
*define clickstr "」。!?",2 game *start date %0,%1,%2 time %3,%4,%5 今日の日付は、%0年%1月%2日です。 現在の時刻は、%3時%4分%5秒です。 end | ||
これがNScripterを起動していた日付と時刻です。 日付の取得には「date」を用います。 後に用意した3つの数字変数には、左から「年」「月」「日」が入ります。 「年」には下一桁のみ入るようです。 時刻の取得には「time」を用います。 後に用意した3つの数字変数には、左から「時」「分」「秒」が入ります。 24時間制です。 | ||
NScripter内部のタイマーを使って時間経過を管理します。
内部タイマーの値の推移に注目してください。
| ||
*define clickstr "」。!?",2 game *start resettimer タイマーの値を0にリセットして動かしました。 gettimer %0 タイマーの値は%0です。 タイマーが10000になるまでウェイトします。 waittimer 10000 gettimer %0 タイマーの値は%0です。 end | ||
「resettimer」は内部タイマーを0をリセットさせます。 この命令文の直後から内部タイマーは動き出します。 そして、現時点での内部タイマーの値を取得するのが「gettimer」です。 取得した値は数字変数に代入します。単位はミリ秒。 「waittimer」は、指定した値と内部タイマーの値が一致するまで待ち続けます。 「wait」命令によく似ていますが、こちらの方がより正確な時間を測れます。 今まで「wait」を使っていた所に「waittimer」を使うことも出来ます。 上の例では「waittimer」で指定した値は10000なので、 「waittimer」命令を読み込む時点で、既に内部タイマーが10000ミリ秒を超えていたら 「waittimer」はスキップされます。 | ||
選択肢に制限時間を設けます。ここでいう選択肢は「select」ではなく、
2.6節で使ったスプライトボタンの選択肢のことです。
| ||
*define clickstr "」。!?",2 effect 10,10,1000 game *start スプライトボタンを3つ作り、選択肢にします。 lsp 0,":a/2,0,3;image\start.jpg",220,280 lsp 1,":a/2,0,3;image\load.jpg",220,340 lsp 2,":a/2,0,3;image\owaru.jpg",220,400 print 10 spbtn 0,1 spbtn 1,2 spbtn 2,3 mov %1,2000 *else sub %1,%2 btntime %1 btnwait %0 if %0=0 getbtntimer %2:goto *else if %0=-1 getbtntimer %2:goto *else if %0=-2 goto *timeout if %0=1 goto *hajime if %0=2 goto *tuduki if %0=3 csp -1:print 10:end *hajime ゲームが始まります。 end *tuduki systemcall load end *timeout 時間切れです。 end | ||
2.6節に制限時間が付いただけです。
「btntimer」は、「btnwait」の待ち時間を設定する命令です。 「btntimer」で「制限時間」をミリ秒単位で指定します。 この場合、%1には2000が代入されているので制限時間は2000ミリ秒になります。 ボタン待ち中に制限時間を超えると、変数には自動的に-2が代入されます。 「getbtntimer」は、「btnwait」で待った時間をミリ秒単位で取得します。 右クリック等で*elseに戻ったとき、元の制限時間から「getbtntimer」で取得した時間を 「sub」で引いてやり、その値をbtntimerの時間制限に再び指定し直すことで、 *elseに戻るたびに制限時間がリセットされるのを防いでいるのです。 ゲーム中で複数回、制限時付き選択肢を使うときは、 2回目以降は%2を0に初期化することを忘れないようにしましょう。 | ||
制限時間は、ノベルやアドベンチャーの選択肢の他、
クイズゲームなどでも割とよく使われているようです。 ゲームにリアルタイム性を出す上で、時間の管理は欠かせません。 次節は、バーの扱いについてです。 | ||