setInterval()を利用したFlash暗算ゲーム Adobe Flash CS3 Professionalを使用してサンプルを作成しています。 |
連続して厳密な感覚で出題するための「setInterval()」
2. 今回の制作フローは以下の通りになります。
・ ゲーム開始画面で「start」ボタンを押してゲーム開始
・ 出題準備画面を一定時間表示
・ 出題中画面で1秒おきに1桁のランダムな整数を画面に表示、連続して5問出題する
・ 解答入力画面でテキストボックスに解答入力、「Answer」ボタンを押すことで判定
・ 正解の場合画面に「正解と表示」
・ 不正解の場合画面に「正解を表示」
3. レイヤー「action」のラベル「question」に以下のActionscriptを記述してください。
stop(); qTime = 0; aNum = 0; arithmeticInt = setInterval(arithmetic,1000); function arithmetic(){ if(qTime == 5){ clearInterval(arithmeticInt); gotoAndStop("answer"); }else{ qNum = Math.floor(Math.random()*10)+0; qText.text = qNum; qTime += 1; aNum += qNum; } }1行目でフレームの再生を停止しています。
2・3行目で使用する変数を初期化しています。
4行目で「setInterval()」を使用しています。ここでは「1000ミリ秒(=1秒)」おきに関数「arithmetic」を実行しています。
5行目以降が関数「arithmetic」です。
最初のif文で比較している変数「qTime」は出題回数を管理する変数です。5回出題したいので、ここでは「5」を入力します。
まず、5回出題が終わった場合からです。1行目で実行している「setInterval()」を「clearInterval()」を使用して停止しています。
2行目で解答入力画面へ移動させています。
次に後半の出題部分です。1行目では出題する整数を管理する「qNum」へランダム関数を利用して、「0~9」までの整数を入力しています。
2行目で問題を表示するテキストボックス「qText」へ、「qNum」の値を代入し表示しています。
3行目では出題回数をカウントアップしています。
4行目で正解を管理する変数「aNum」に出題した値を足しています。これが5回繰り返し出題部分は完成です。
4. レイヤー「action」のラベル「answer」に以下のActionscriptを記述してください。
stop(); btAnswer.onRelease = function(){ if(aText.text == aNum){ gotoAndStop("aTrue"); }else{ gotoAndStop("aFalse"); } }1行目でフレームの再生を停止します。
2行目から「answer」ボタンをクリックしたときの処理を記述しています。
3行目からが正否の判定です。入力テキストボックス「aText」の内容が正解の値「aNum」と一致しているかを判定しています。
一致の場合、正解画面の「aTrue」へ、不一致の場合、不正解画面の「aFalse」へ移動します。
5. 正解の場合は「正解」と表示するだけですが、不正解の場合は正解を表示します。レイヤー「action」のラベル「aFalse」に以下のActionscriptを記述してください。
stop(); fText.text = aNum; btRetry.onRelease = function(){ gotoAndPlay("ready"); }2行目で正解を表示するテキストボックス「fText」に正解の値「aNum」を代入しています 。
これで完成です!
完成したファイルをダウンロード
作例が簡単過ぎましたか?私の暗算レベルに合わせてしまったようです。今回のように「setInterval()」は連続して繰り返す処理に関してFPSに依存せず、フレームを利用する場合に比べて正確に表示することが可能です。といっても数千分の1秒での処理となると当然処理に遅延は発生し、長時間繰り返すことで遅延は大きくなってしまいます。時間を計る用途であれば「DateObject」を使用し、間隔をフレームよりは正確に表示したい場合は「setInterval()」を使用するといったように使い分けが必要です。