ケータイFlashゲーム制作レクチャー

第14回マップ冒険ゲームレクチャー(4) イベントの作成②~そして!!

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

暑いですね~。マップ冒険ゲームも、夏真っ盛りの今回がラスト!それと、このFlashゲームレクチャーは、今回で連載一周年を迎えました♪

前回(13回目)に続き、今回は…

今回は、前回のレクチャーⅢ イベントを作成する!の続きからとなるが、使用するflaも前回と同様の「GameMapAdv」を用いて進めていく。

レクチャーⅢ イベントを作成する!

前回は、⁠イベント位置データ」とマップに配置したイベントの解説を行い終了した。今回は、その続きからとなるので、イベント位置データによってマップ上に配置されたイベントの中身、実際のイベント内容やイベントコントロール、表示するメッセージなどについて解説を進めていく。

(1)イベントクリップ解説

マップ上に配置されたイベントの実際、各イベント内容は、⁠イベントクリップ」内に一括してまとめてあり、ここでイベントコントロールやメッセージ表示などを行っている。

今回のサンプルゲームでのイベントは、各イベントに対応するメッセージを表示するのみだが、基本的な作りとして、今回のようなイベントコントロールクリップを作り、その中でイベントコントロールを行うのが扱いやすい。

Fla画面1 配置されたイベントクリップ
画像

イベントクリップ内部では、ゲーム中に発生するev1~ev4の各イベントをタイムラインによって区分けして管理している。ev1~ev4は、多少の違いはあれど、基本的に同様な構造で同様なイベントコントロールによってイベント進行やメッセージ表示を行っている。

それでは、各イベント内容の解説をしていくが、主要なイベント「ev1」⁠ev2」の解説のみでご了承頂きたい。

(2)ev1「スコップの入手」解説

まず、イベント1(フレームラベル「ev1⁠⁠)を解説すると…

Fla画面3 ev1部分
Fla画面3 ev1部分
〔①解説〕

このフレーム1は待機フレームであり、ゲームスタート時はstopによって停止になっている。また、各イベントが終了するとこのフレームにgotoStopしてくる。

ここに記したスクリプトは下記の通りで、_visible=falseによってイベントクリップの表示OFFを行い、各フラグ(変数)の値を初期値0に戻している。

stop ();
_visible = false;
../map:evEnd_input = 0;    ―①
../map:keyNG = 0;    ―②

 〔③解説〕でも説明するが、イベント終了ボタンの入力を有効にするフラグ。0は不可、1が可で、待機フレームで値を0に戻している

 以降の(4)でも解説するが、この値が1だとキー入力不可となり、PCは移動できなくなる。待機フレームで値を0に戻している

〔②解説〕

PCがマップ上に配置されたイベント1上にいる状態で5キーが入力されると、このev1フレームへgotoPlayしてきて、ここから再生スタートする。

このフレームへgotoPlayしてくると、IF文によってイベントの発生判定を行う。フラグev1の値をチェックし、イベント1が未発生ならイベントを発生させ、発生済なら何も行わず待機フレームへ戻している。

if (../map:ev1 == 0) {
 _visible = true;
 play ();┛①
} else {
 gotoAndStop (1);    ―②
}

 フラグev1の値が0なら、このイベント1は未発生なので、イベントクリップを表示ONしてイベントを実行する

 フラグev1の値が1なら、このイベント1は発生済なので、何もせず待機フレームへ戻す

〔③解説〕

このフレームで画面上にイベント終了ボタンを表示し、5キー入力の受付けを可にする。ev1のメッセージはフレーム3ですでに表示されているが、キー入力はこのフレームまで受付けない。この理由は、キー入力をメッセージ表示と同タイミングで許してしまうと、メッセージを読む前に誤って終了してしまう恐れがあるため。

stop ();
../map:evEnd_input = 1;    ―①

 evEnd_inputの値を1にすることにより、5キー入力を可にしている

〔④解説〕

イベント1の最終フレーム。ここでイベント1を発生済にし、待機フレームへ戻す。

../map:ev1 = 1;    ―①
gotoAndStop (1);

 ev1の値を1にすることにより、イベント1は発生済となる。これによって「スコップ(フラグev1はスコップの入手という意味も兼ねる)」が入手済にもなる

(3)ev2&2a「目的物の入手」解説

続いて、主要イベントであるイベント2(フレームラベル「ev2&2a⁠⁠)は、プレイヤーがスコップを所持しているかどうかによって内容が分岐するが、基本的な進行はイベント1と同様である。

このサンプルゲーム「GameMapAdv」は、ev2aが発生することによって"ある物"が入手でき、一応終了となる(といってもエンディングは無いが…⁠⁠。"ある物"は簡単に入手できるので、プレイして頂ければと思う。

Fla画面4 ev2&2a部分
Fla画面4 ev Fla画面4 ev

このev2&2aの解説は、上のFla画面4に番号振った①と②について行うことにする。

〔①解説〕

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にすることにより、イベント2は発生済となる。これによって「目的物(フラグev2は目的物の入手という意味も兼ねる)」が入手済にもなる

(4)5キー入力解説。イベントの発生と終了

イベントは、5キー入力により、PCがいる場所にイベントがあった際に発生するが、一旦イベントが発生すると、keyNG=1によって全てのキー入力を受付けなくしている。

そしてイベントメッセージが表示され、前項(2)で触れたevEnd_input=1によって5キーのみ入力を許し、5キーの入力によってイベントから抜けることになる。

5キーの入力については、マップクリップ内に配置したボタンに記述した次のスクリプトによって行っている。

Fla画面5 マップクリップ内に配置したボタン
Fla画面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)イベントの発生について補足

サンプルゲーム「GameMapAdv」でのイベントは、5キー入力によって発生するものしかないが、この発生トリガーのみでは、マップ冒険ゲーム1回目に載せたサンプルゲームのような他マップへの自動移動など、5キー入力以外で発生するイベントは対応できない。

そこで、ゲーム中、どんなイベントを作りたいか?を考えた上、キー入力により発生、PCがイベント範囲に入ったら発生、何かを所持していたら発生など、幾つか用意しなければならないだろう。

ただ、これらは、今までレクチャーしてきた何かの方法で実現可能であり、例えば、PCがイベント範囲に入ったら…は、イベント位置データを参照すればいいし、何かを所持していたら…は、それが何であろうとフラグを参照すればイベントを発生させられる。

…というわけで、イベントの作成解説は以上で終わるが、さて皆さんは、どんなストーリーやイベントを作るのだろう? 好みのゲームBGMにノッて、ワクワクするゲームシナリオを作ってください!

そして…まだ冒険は続く!

さて、4回に渡って行ってきたマップ冒険ゲームレクチャーも、一旦ここで終了としたい。サンプルゲームに登場する全てのイベントについて解説していないし、モンスターや他マップへの移動なども残っているが、それらは下記に少々紹介するに留め、また機会があれば加筆してレクチャーできればと思う。

(1)1回目のサンプルゲームについて一部紹介

Fla画面6 複数マップのタイムライン構造
Fla画面6 複数マップのタイムライン構造
Fla画面7 多層スクロールするMAP2
Fla画面7 多層スクロールするMAP2
Fla画面8 モンスター配置
Fla画面8 モンスター配置

…以上、マップ冒険ゲームレクチャーの終了です!

ゲームの規模上、全て解説し切れず恐縮ながら、こういったマップ冒険ゲームの考え方、Flashによる設計例、作法のサンプル色々と、全4回に渡って熱い思いで執筆とサンプルの作成をしてきたつもりです。

ボスを倒してエンディングへ辿り着くにはまだ先は長いけれど、作ったゲームを遊ぶプレイヤーが楽しんでくれたら!皆さんも、そんな情熱で、熱~いマップ冒険ゲームを作ってください!


謝辞。
サンプルゲーム用に作曲いただいた渡邊さん、AYU○Iに始まり、今回も有難うです!今回のサンプルゲーム、非公式ながら、あのゲームの続編ということで??? 18年ぶり(^^;)にオリジナルスタッフで作れて楽しかったです。感謝!

マップ冒険ゲーム、これにて一応おしまいです! お付き合い頂き、お疲れ様でした! さて次回からはパズルゲームです。お楽しみに!!

おすすめ記事

記事・ニュース一覧