マップ冒険ゲームの最終回!

前回(13回目)に続き、今回は…
今回は、
- 実際のflaファイルGameMapAdv.
fla (Flash CS3用のもの、 Flash 8用のもの)
レクチャーⅢ イベントを作成する!②
前回は、
(1)イベントクリップ解説
マップ上に配置されたイベントの実際、
今回のサンプルゲームでのイベントは、

イベントクリップ内部では、
それでは、
(2)ev1「スコップの入手」解説
まず、

- 〔①解説〕
このフレーム1は待機フレームであり、
ゲームスタート時はstopによって停止になっている。また、 各イベントが終了するとこのフレームにgotoStopしてくる。 ここに記したスクリプトは下記の通りで、
_visible=falseによってイベントクリップの表示OFFを行い、 各フラグ (変数) の値を初期値0に戻している。 - 〔②解説〕
PCがマップ上に配置されたイベント1上にいる状態で5キーが入力されると、
このev1フレームへgotoPlayしてきて、 ここから再生スタートする。 このフレームへgotoPlayしてくると、
IF文によってイベントの発生判定を行う。フラグev1の値をチェックし、 イベント1が未発生ならイベントを発生させ、 発生済なら何も行わず待機フレームへ戻している。 - 〔③解説〕
このフレームで画面上にイベント終了ボタンを表示し、
5キー入力の受付けを可にする。ev1のメッセージはフレーム3ですでに表示されているが、 キー入力はこのフレームまで受付けない。この理由は、 キー入力をメッセージ表示と同タイミングで許してしまうと、 メッセージを読む前に誤って終了してしまう恐れがあるため。 - 〔④解説〕
イベント1の最終フレーム。ここでイベント1を発生済にし、
待機フレームへ戻す。
stop ();
_visible = false;
../map:evEnd_input = 0; ―①
../map:keyNG = 0; ―②
① 〔③解説〕でも説明するが、イベント終了ボタンの入力を有効にするフラグ。0は不可、1が可で、待機フレームで値を0に戻している
② 以降の(4)でも解説するが、この値が1だとキー入力不可となり、PCは移動できなくなる。待機フレームで値を0に戻している
if (../map:ev1 == 0) {┓
_visible = true;|
play ();┛①
} else {
gotoAndStop (1); ―②
}
① フラグev1の値が0なら、このイベント1は未発生なので、イベントクリップを表示ONしてイベントを実行する
② フラグev1の値が1なら、このイベント1は発生済なので、何もせず待機フレームへ戻す
stop ();
../map:evEnd_input = 1; ―①
① evEnd_
../map:ev1 = 1; ―①
gotoAndStop (1);
① ev1の値を1にすることにより、イベント1は発生済となる。これによって
(3)ev2&2a「目的物の入手」解説
続いて、
このサンプルゲーム


このev2&2aの解説は、
- 〔①解説〕
PCがマップ上に配置されたイベント2上にいる状態で5キーが入力されると、
このev2フレームへgotoPlayしてきて、 ここから再生スタートする。 イベント1同様にイベントの発生判定を行い、
発生ならイベントを実行し、 否なら何も行わず待機フレームへ戻している。 if (../
map:ev1 == 0) { ┓ _visible = true;| play ();┛(A) } else if (../map:ev1 == 1 and ../ map:ev2 == 0) { ┓ _visible = true; | gotoAndPlay ("ev2a"); ┛ (B) } else {┓ gotoAndStop (1);| }┛(C) (A) まず、フラグev1の値を見る。その値が0ならイベント1は未発生であり、 まだスコップは入手していない。従って、 この場合は 「何か掘るものがあれば…」 というメッセージを表示する。 (B) ev1の値が0でなければこの判定に移ってくる。ここでは、ev1の値が1 (スコップ入手済) かつ、 ev2の値が0 (目的物未入手) であれば実行され、 これにより目的物が入手できる。 (C) 上記二つ以外ならここが実行される。つまりは、すでに目的物は入手しており、 このイベント2は発生済になっている。従って、 何も行わず待機フレームへ戻す。
- 〔②解説〕
イベント2の最終フレーム。ここでイベント2を発生済にし、
待機フレームへ戻す。
../map:ev2 = 1; ―①
gotoAndStop (1);
① ev2の値を1にすることにより、
(4)5キー入力解説。イベントの発生と終了
イベントは、
そしてイベントメッセージが表示され、
5キーの入力については、

on (keyPress "5") {┓
if (evEnd_input == 1) {|
tellTarget ("../ev") {|
nextFrame ();|
}┛(A)
} else if (keyNG == 1 or ido_wait == 1) { ―(B)
} else {
if (substring (ed, pc_md, 1) == 0) { ―(C)
} else { ┓
keyNG = 1; |
key_input = 5; |
tellTarget ("../ev") { |
gotoAndPlay ("ev" add substring (../map/:ed, ../map/:pc_md, 1)); |
} ┛(D)
}
}
}
(A) まず、フラグevEnd_ inputの値を見る。その値が1なら、 発生中のイベントが終了入力を求めていることになり、 入力された5キーによって発生中のイベントは終了することになる。 (B) 上記が当たらなければこの判定に移ってくる。フラグkeyNG(キー入力の受付け可不可) の値が1か、 フラグido_ wait (PCが移動中か否か) の値が1なら、 イベント発生中かPCが移動中なので、 何も起こさない。 (C) 上記二つ以外ならこの判定に移ってくる。ここでは、5キーの入力によって、 PCがいる場所にイベントがあるか 「イベント位置データ」 を参照している。その結果、 イベント位置データの値は0だったので、 イベントは無く何も起こさない。 substring (ed, pc_
md, 1) == 0は、 (イベント位置データ,マップ移動データ上のPC位置,1) が0ならば…であり、 前回レクチャーした 「イベント位置データ」 と前々回にレクチャーした 「マップ移動データ上のPC位置」 を比較し、 PCがいる場所にイベントがあるかチェックするもので、 例えば、 PCがマップ移動データ上の100番目位置にいるとすると、 イベント位置データの100番目を文字列検索し、 100番目の文字が0ならば…となる。 (D) イベント位置データの値が0以外、イベントがあったので、 イベント位置データの値と対応するイベントを発生させる。その際、 キー入力を不可にし、 PCの移動や5キーの入力を受付けなくしている。
(5)イベントの発生について補足
サンプルゲーム
そこで、
ただ、
…というわけで、
そして…まだ冒険は続く!
さて、
(1)1回目のサンプルゲームについて一部紹介



…以上、
ゲームの規模上、
ボスを倒してエンディングへ辿り着くにはまだ先は長いけれど、
謝辞。
サンプルゲーム用に作曲いただいた渡邊さん、
