【複数のキーが同時に押されたかどうかを取得したい】



 キー入力の受け付け先を変える事で、複数のキーが押されたかどうかを同時に調べる事ができます。  

【目標】

 1.キー入力で、複数のキーが押されたかどうか(同時押し)を調べる。
  (今回は左Shiftキーと決定キーの同時押しを判定するイベントを作成します)
  
 2.同時押しした時に、文書を表示する。

 
 【関連項目】
  特定のキーが押されたかどうかを取得したい
 

【手順】

―― 【1】イベント作成 ――

 まずマップ選択で「サンプルマップA」に切り替えてください。
 分かりやすいところに、決定キーで起動するイベントを作成します。
 グラフィックはニワトリにしましょう。
 (参考:【決定キーで起動するイベント】
 


―― 【2】ループコマンド ―― 

 イベントウィンドウの右下にある
 「■ コマンド入力ウィンドウ表示 ■」をクリックして、
 イベントコマンド入力ウィンドウを開いてください。
 
 左側一覧から「H イベント制御」を選択します。
 左上辺りにある「ループ(繰り返し)」をクリックして入力してください。
 
 
 ※今回ループを使うのは、決定キーで起動するイベントだからです。
   また、キー入力を2つ使用するため片一方で処理が止まってしまわないよう、
   「キーが押されるまで待つ」にチェックは入れられない、という理由もあります。
   そのため、毎フレーム実行される並列イベントなどでは、ループは必要ありません。
 


―― 【3】キー入力1(左Shift) ――

 ループ内にイベントを入力していきます。
 ウィンドウの左側から、「9 キー入力」を選択しましょう。
 
 代入先は「このEv:セルフ0」のまま変更しません。
 キー種をクリックして「キーボード全キー(100〜)」を選んでください。
 そのすぐ下にある「特定キーのみ判定」にチェックを入れ、
 キーコード欄には「142」と入力しましょう。
 
 また、「キーが押されるまで待つ」にチェックが入っていない事を、
 確認しておいてください。
 
 最後に、ウィンドウ右下の「入力」ボタンをクリックします。
 
 ※キーコードの数値は、マニュアルの
   イベントの作成→キー入力の項目に一覧があります。
   また、エディタに打ち込むと、下部に対応したキーの名前が表示されます。
 


―― 【4】キー入力2(決定キー) ――

 続いて2つ目のキー入力コマンドを入れていきます。
 
 そのままキー入力受け付けの、代入先を変更してください。
 代入先は「このEv:セルフ1」を選びます。
 
 そしてキー種は「基本」に戻しましょう。
 決定キーの項目のみチェックを入れ、他は外してください。
 方向キーも必要ありませんので、「受け付けない」にします。
 
 出来ましたらウィンドウ右下の「入力」です。
 


―― 【5】条件分岐の設定 ――

 今度は左側一覧から「7 条件(変数)」を選んでください。

 3変数を連動のチェックは外しましょう。
 1つ目の条件分岐は「このイベント:Self0が0と同じ」
 2つ目の条件分岐を「このイベント:Self1が10と同じ」
 に設定します。
 
 1つ目の分岐内は空のままいじりません。
 2つ目の分岐内に「文章の表示」で、
 キーが同時押しされた時に表示する文章を入力してください。
 
 ※この分岐の解説は、ページ下部で行っています


―― 【6】ウェイトを入れる ――

 最後に「分岐終了」の下、「ループここまで」との間に
 カーソルを移動してください。
 
 もう一度ウィンドウ左から「H イベント制御」をクリックします。
 ウェイトの項目をクリックして、1フレーム入力しましょう。
 


 以上で完成です。
 セーブしてテストプレイをしてみましょう。
 
 
 イベントに話しかけると移動が出来なくなりますが、
 問題はありません。
 
 まず決定キーのみを押してください。
 決定キー単独では文章が表示されない事を確認します。
 
 次に、左Shiftと同時に決定キーを押してください。
 入力した文章が表示されたら成功です。
 お疲れ様でした。
 

【問題が発生した場合】

◆イベントに話しかけると「1フレームあたりの処理が500000個を超えました!」という緑帯が出る
 ウェイトを入れ忘れているか、ウェイトの位置が間違っています。
 確認しましょう。
 
◆左Shiftや決定キーだけを押しても文章が表示されてしまう
 条件分岐の設定を間違えているか、
 文章の挿入位置を間違えている可能性があります。
 分岐の設定と、文章の位置を見直してください。
 
◆キーを入力しても、たまにしか反応してくれない
 ウェイトの数値が大きすぎる可能性があります。
 毎フレーム判定するためには、1フレーム(並列なら0)、あるいはそれに近い数値にしてください。
 
◆キーを同時押ししても反応してくれない
  ・キー入力の受け付け先を間違えている
  ・条件分岐の設定を間違えている
  ・キーコードの数値を間違えている
 などが考えられます。
 それぞれ確認しましょう。
 

【余談】

【5】の条件分岐は何してる?

 正しいキーが入力されると、代入先変数にその値が代入されます。
 今回の場合ですと、セルフ0には左Shiftの「142」が、
 セルフ1には決定キーの「10」が代入される事になります。
 そして、それ以外の時には常に「0」が代入されています。
 
 つまり、1つ目の分岐は左Shiftキーが押されていない時に満たされます。
 その為、左Shiftが押されていると条件を満たさずに、2つ目以降の判定へと進みます。
 
 そこで2つ目に決定キーの条件を記入してやると、
 左Shiftが押され、尚且つ決定キーも押されている状態のみを、
 1つの条件分岐コマンドで判別する事が可能です。
 
 もちろん、制作時に分かりやすい事が第一ですので、
 画像上のように2つの分岐を使用しても構いません。
  
  


<執筆者:七海> 


【←にフレームが表示されていない方はここをクリック】