[前へ] [目次へ] [次へ]

選択肢で反応を変えるイベントを作ってみる

今回は選択肢を提示して、その回答に応じて反応を変えるイベントを作ってみます。


●選択肢の処理
   選択肢を提示してプレイヤーからの回答を受け取る場合、以下のような手順が必要です。
      ●選択肢ウィンドウを作成する
      ●選択肢ウィンドウに表示する文章を設定する
      ●プレイヤーが選択肢を選ぶのを待機する
      ●プレイヤーが選んだ選択肢を取得する
   とはいえ、選択肢は比較的よく使う処理なので、これを全部やってくれるようにしたメソッドが準備されています。
   これを使うとデフォルト設定の選択肢を簡単に出すことができます。
   (なお、自分で上記の手順を全部記述した場合はもっと凝った表示を行うことができます)
   
   しかし、これだけではまだ「プレイヤーが選んだ選択肢によって反応を変える」ことができません。
   選んだ選択肢に応じて処理を分ける必要があります。
   
   と、いろいろ難しそうに聞こえるかも知れませんが、ここまでは「コマンドの挿入」で行けちゃいます。


   「受け取る変数式」には選んだ選択肢番号(0起算)が代入されます。
   ここでも「型名 名前」の形で入力するとローカル変数の定義を同時に行うことが出来ます。
   「デフォルトのカーソル位置」には選択肢を表示した時に最初にカーソルを置く場所を指定します。
   場所は選択肢の一番上を0として、下に向かって1、2、3・・・として指定します。
   「表示する選択肢」には選択肢として表示する文章を入力します。
   入力した文章は1行毎に分割され、それぞれが選択肢になります。
   初期状態では「はい」「いいえ」の二択が入力されています。

   
   画面の内容で決定すると以下のようなスクリプトが挿入されます。
   なお、選択肢はキャンセルキー(キーボードのX/Esc)でキャンセルでき、
   プレイヤーが選択肢を選択またはキャンセルすると選んだ選択肢番号または-1(キャンセル)が selectid に代入されます。
<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
< 15>
< 16>

//選択肢で選択させる (初期カーソル,選択肢0,選択肢1,...)
Integer selectid=ECL::WaitSelect(0,
   
"はい",
   
"いいえ");
switch(selectid){
case 0:// はい を選択した場合
   
   
break;
case 1:// いいえ を選択した場合
   
   
break;
default://キャンセルした場合
   
   
break;
   8行目、11行目、14行目に何も書いていない行があります。
   これらの場所にはそれぞれを選択した場合の処理を記述します。
   「コマンドの挿入」で内容を入力する場合は挿入したい位置の行にカーソルを合わせてから
   「コマンドの挿入」ボタンを押します。

   
   それぞれの場合の処理を追加します。
<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
< 15>
< 16>
< 17>
< 18>
< 19>
< 20>
< 21>
< 22>
< 23>
< 24>
< 25>
< 26>
< 27>
< 28>

//選択肢で選択させる (初期カーソル,選択肢0,選択肢1,...)
Integer selectid=ECL::WaitSelect(0,
   
"はい",
   
"いいえ");
switch(selectid){
case 0:// はい を選択した場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"いいね!");
   
   
break;
case 1:// いいえ を選択した場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"残念。");
   
   
break;
default://キャンセルした場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"何か答えて・・・");
   
   
break;

   実行して確認してみましょう。



●メッセージ表示を残して選択肢を提示する
   とりあえず選択肢は出せましたが、これだと何を選択しようとしているのかわかりません。
   同時にメッセージを表示してみましょう。
<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
< 15>
< 16>
< 17>
< 18>
< 19>
< 20>
< 21>
< 22>
< 23>
< 24>
< 25>
< 26>
< 27>
< 28>
< 29>
< 30>
< 31>
< 32>

//メッセージの表示(待機,消去しない) (表示内容)
ECL::WaitMessage(
   
"気分ノってる?");

//選択肢で選択させる (初期カーソル,選択肢0,選択肢1,...)
Integer selectid=ECL::WaitSelect(0,
   
"はい",
   
"いいえ");
switch(selectid){
case 0:// はい を選択した場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"いいね!");
   
   
break;
case 1:// いいえ を選択した場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"残念。");
   
   
break;
default://キャンセルした場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"何か答えて・・・");
   
   
break;
   
   単に選択肢の前にメッセージ表示を追加しただけなのですが、
   「挿入して次ページ」の方( WaitMessage )で表示するのがポイントです。
   「最終ページとして挿入」( WaitLastMessage )で表示すると選択肢の提示前に消えてしまいます。
   また、この方法で表示状態にしたメッセージは 最終ページ を表示するか、
   メッセージウィンドウを非表示にする処理を行うまで「表示しっぱなし」になりますのでご注意ください。

   実行して確認してみましょう。



●メッセージを表示しながら選択肢を提示する
   メッセージと同時に選択肢は出せましたが、メッセージ送りをしないと選択肢が出ません。
   これで構わない場合も多いでしょうが、メッセージ表示と同時に選択肢を出したいこともあるでしょう。
   メッセージ表示開始と同時に選択肢を提示してみます。
<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
< 15>
< 16>
< 17>
< 18>
< 19>
< 20>
< 21>
< 22>
< 23>
< 24>
< 25>
< 26>
< 27>
< 28>
< 29>
< 30>
< 31>
< 32>

//メッセージの表示(待機しない,消去しない) (表示内容)
ECL::ShowMessage(
   
"気分ノってる?");

//選択肢で選択させる (初期カーソル,選択肢0,選択肢1,...)
Integer selectid=ECL::WaitSelect(0,
   
"はい",
   
"いいえ");
switch(selectid){
case 0:// はい を選択した場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"いいね!");
   
   
break;
case 1:// いいえ を選択した場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"残念。");
   
   
break;
default://キャンセルした場合
   
   //メッセージの表示(待機,消去する) (表示内容)
   
ECL::WaitLastMessage(
      
"何か答えて・・・");
   
   
break;
   
   変更したのは3行目を WaitMessage から ShowMessage にしただけです。
   ECL::ShowMessage メソッドは「コマンドの挿入」からは設定できません。
   このメソッドはメッセージを表示開始するだけで入力を待たないので、すぐに選択肢が表示されます。
   これに限らず、「コマンドの挿入」からは入力できないメソッドやオプションはたくさん存在します。
   今はそれらを扱うのは難しいでしょうから、 FGS仕様 や FGES仕様 に全貌が書いてあることだけ覚えておいてください。




[前へ] [目次へ] [次へ]

最終更新 2017/07/11