Flash Liteでゲームを作ろう!
ゲームの仕組みと構成
ゲームのメイン部分となるラベル「setNo」の部分について解説していきます。
関連するタイムラインのスクリプトと各オブジェクトは下記になります。
1.ステージ外の左側にある「数字」のムービークリップ
2.ステージ外の左側にある「空ボタン」
3.タイムライン11フレーム目のスクリプト
4.タイムライン25フレーム目のスクリプト
5.ラベル「hit」のスクリプト
6.ラベル「miss」のスクリプト
先ほど解説したタイトル画面のスタートボタンが押されると、このラベル「setNo」にフレームがジャンプされます。
最初に実行されるのが「3.タイムライン11フレーム目のスクリプト」です。ここではランダムの数字を決定し、「1.ステージ外の左側にある「数字」のムービークリップ」の数字オブジェクトがステージに配置されます。
まずは、ランダム関数で数字を決定します。
rNo = random(10);
上記のスクリプトを実行すると、「rNo」変数に0~9のいずれかの数字が代入されます。
そして、「1.ステージ外の左側にある「数字」のムービークリップ」の数字オブジェクトの中にはダイナミックテキストが配置されていて、「No」変数で数字の表示を変更できますので、下記のようにスクリプトを実行します。
rndNo.No = rNo;
さらに、数字オブジェクトのXとY座標の位置をランダムに設定します。
rndNo._x = random(200) + 20;
rndNo._y = random(140) + 20;
上記ではX座標は20~220、Y座標は20~160の範囲内にランダムに配置されることとなります。
その後、数字は一定時間表示され、ユーザーがアクションを起こすのを待ちます。
数字が表示されてからのユーザーのアクション
数字が表示されてからのユーザーのアクションとしては、下記の3つが想定されます。
A.表示されている数字キーを押す
B.表示されている数字と異なるキーを押す
C.何もしない
「C.何もしない」場合は、「4.タイムライン25フレーム目のスクリプト」が実行されます。
countNG++;
gotoAndPlay("setNo");
この場合は失敗のカウントが加算され、再びラベル「setNo」のフレームへ戻ります。
次に「A.表示されている数字キーを押す」と「B.表示されている数字と異なるキーを押す」の場合は「2.ステージ外の左側にある「空ボタン」」にスクリプトを記述しています。表示されている数字と、ユーザーが押した数字のキーが合っているかどうかを判別します。
on (keyPress "0") {
if (rNo==0) { call("hit"); } else { call("miss"); }
}
Flash Liteのonハンドラ内ではどのキーを押したかという判別ができないので、0~9までのonハンドラを別個に用意することになります。
ここでポイントとなるのが、call()関数です。Flash Lite 1.1ではfunctionを使用できません。そのため、このcall()を代用することになります。call()では引数としてフレームの番号またはラベルを指定し、そのフレームのスクリプトが実行させることとなります。
今回は数字が合っているか間違っているかの判別を行い、合っていれば「5.ラベル「hit」のスクリプト」、間違っていれば「6.ラベル「miss」のスクリプト」が実行されます。
数字が間違っていれば、「6.ラベル「miss」のスクリプト」に記述されているように、失敗カウントが加算されます。
countNG++;
数字が合っていれば、「5.ラベル「hit」のスクリプト」が実行されます。
countOK++;
stop();
tellTarget("/rndNo") { play(); }
成功のカウントを加算し、ルートの再生を停止します。同時にユーザーに数字が合っていたと認識させるため、「1.ステージ外の左側にある「数字」のムービークリップ」の数字がはじけるアニメーションを再生させます。そして、アニメーションが終了すると、ルートのラベル「setNo」から再び再生させます。
tellTarget("/") { gotoAndPlay("setNo"); }
ゲームの主な流れを説明してきましたが、このままではゲームがいつまでたっても終了しません。
次に、ゲーム全体の進行を監視する部分を解説していきます。