WOLF RPGエディター(ウディタ)/イベントコマンド【サイトトップへ戻る】
■【使用例】キー入力
(更新:2023/02/23)


イベントコマンド【キー入力】に関する使用例を紹介します。


ショートカット
■【使用例】「キーが押されるまで待つ」を自作する(キーボード)
「キー入力受け付け」
■【使用例】「キーが押されるまで待つ」を自作する(クリック)
「キー入力受け付け」
■【使用例】キーボード入力を強制終了させる
「自動キー入力」



以下は【キー入力】を使った別のページにある使用例です。
クリックするとYADOT-WOLF内の別ページが開きます。

別ページの使用例
■自作メニューの基礎講座(4×3の自作メニュー作り)
「キー入力受け付け」



【キー入力】の基本説明は別ページに記載しています。
【キー入力の基本説明を開く】


  
「キー入力受け付け」
■【使用例】「キーが押されるまで待つ」を自作する(キーボード)

【キー入力】でキーが押されるまで処理を一時停止する場合は、「キーが押されるまで待つ」を設定します。

しかし「キーが押されるまで待つ」の場合、キーを押し続けると何度も実行すると言った問題があります。

例えば以下のような処理を実行した場合、Aキーを押し続けると何度もデバッグ文「Aキー実行」が表示されます。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[入力待ち] キーボード(100〜) [キーコード[130]のみ判定] ( Aキー )
■条件分岐(変数): 【1】 CSelf10 が 130 と同じ
-◇分岐: 【1】 [ CSelf10 が 130 と同じ ]の場合↓
|■デバッグ文:Aキー実行
|■
◇分岐終了◇

また並列実行や自動実行の中で【キー入力】以外の処理も一緒に設定している場合、
【キー入力】で「キーが押されるまで待つ」を設定すると、他の処理も一緒に止まってしまう問題が発生します。

これらの問題を回避するためには、「キーが押されるまで待つ」を使わず、
自作のキー入力待ちの処理を設定すると良いでしょう。



▼基本設定

セルフ変数[入力可能]を準備し…
セルフ変数[入力可能]=0 キーが押されている状態(キーを離さないとキー入力を受け付けない)
セルフ変数[入力可能]=1 キーが押されていない状態(キー入力を受け付ける)
と処理します。

以下の処理は、Aキーを押すと1回だけデバッグ文「Aキー実行」が実行され、
再び実行するためには、一度Aキーを離して、再びAキーを押し直す必要があります。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[キーコード]キーボード(100〜) [キーコード[130]のみ判定] ( Aキー )
■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
         【2】 CSelf15[入力可能] が 0 と同じ
         【3】 CSelf10[キーコード] が 130 と同じ
-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
|■変数操作: CSelf15[入力可能] = 1 + 0
|■
-◇分岐: 【2】 [ CSelf15[入力可能] が 0 と同じ ]の場合↓
|■
-◇分岐: 【3】 [ CSelf10[キーコード] が 130 と同じ ]の場合↓
|■変数操作: CSelf15[入力可能] = 0 + 0
|■
◇分岐終了◇
|■デバッグ文:Aキー実行
|■
◇分岐終了◇



▼2つのキーに対応

複数のキー入力に対応させる事もできます。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[キーコード]キーボード(100〜) [キーコード[130]のみ判定] ( Aキー )
■キー入力:CSelf11[キーコード2]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■変数操作: CSelf10[キーコード] 下限= CSelf11[キーコード2] + 0
■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
         【2】 CSelf15[入力可能] が 0 と同じ
-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
|■変数操作: CSelf15[入力可能] = 1 + 0
|■
-◇分岐: 【2】 [ CSelf15[入力可能] が 0 と同じ ]の場合↓
|■
-◇上記以外
|■変数操作: CSelf15[入力可能] = 0 + 0
|■条件分岐(変数): 【1】 CSelf10[キーコード] が 130 と同じ
          【2】 CSelf10[キーコード] が 131 と同じ
|-◇分岐: 【1】 [ CSelf10[キーコード] が 130 と同じ ]の場合↓
||■デバッグ文:Aキー実行
||■
|-◇分岐: 【2】 [ CSelf10[キーコード] が 131 と同じ ]の場合↓
||■デバッグ文:Sキー実行
||■
|◇分岐終了◇
|■
◇分岐終了◇



▼セルフ変数[入力可能]をキーコードごとに設定

複数のキーの同時押しなどに対応させる場合は、
キーコードごとにセルフ変数[入力可能]を用意した方が良いでしょう。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[キーコード]キーボード(100〜) [キーコード[130]のみ判定] ( Aキー )
■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
         【2】 CSelf15[入力可能[A]] が 0 と同じ
         【3】 CSelf10[キーコード] が 130 と同じ
-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
|■変数操作: CSelf15[入力可能[A]] = 1 + 0
|■
-◇分岐: 【2】 [ CSelf15[入力可能[A]] が 0 と同じ ]の場合↓
|■
-◇分岐: 【3】 [ CSelf10[キーコード] が 130 と同じ ]の場合↓
|■変数操作: CSelf15[入力可能[A]] = 0 + 0
|■デバッグ文:Aキー実行
|■
◇分岐終了◇
■キー入力:CSelf10[キーコード]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
         【2】 CSelf16[入力可能[S]] が 0 と同じ
         【3】 CSelf10[キーコード] が 131 と同じ
-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
|■変数操作: CSelf16[入力可能[S]] = 1 + 0
|■
-◇分岐: 【2】 [ CSelf16[入力可能[S]] が 0 と同じ ]の場合↓
|■
-◇分岐: 【3】 [ CSelf10[キーコード] が 131 と同じ ]の場合↓
|■変数操作: CSelf16[入力可能[S]] = 0 + 0
|■デバッグ文:Sキー実行
|■
◇分岐終了◇



▼何らかのキーが押されたら先に進む

何らかのキーを押さないと先へ進めないようにする場合で、
処理を始める前から何らかのキーが押されている場合は、一度全てのキーを離してから、
もう一度キーを押さないと先へ進めないようにする場合は、以下のように設定してください。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■変数操作: CSelf15[入力可能] = 0 + 0
■ループ開始
|■ウェイト:1 フレーム
|■キー入力:CSelf10[キーコード] 8方向 決定(10) キャンセル(11) サブキー(12)
|■キー入力:CSelf11[キーコード2]キーボード(100〜)
|■変数操作: CSelf10[キーコード] 下限= CSelf11[キーコード2] + 0
|■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
          【2】 CSelf15[入力可能] が 0 と同じ
          【3】 CSelf10[キーコード] が 1 以上
|-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
||■変数操作: CSelf15[入力可能] = 1 + 0
||■
|-◇分岐: 【2】 [ CSelf15[入力可能] が 0 と同じ ]の場合↓
||■
|-◇分岐: 【3】 [ CSelf10[キーコード] が 1 以上 ]の場合↓
||■デバッグ文:何らかのキーを実行
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇

この処理では「8方向+決定+キャンセル+サブ」と
キーボード全キー(100〜)」の2つの【キー入力】が設定されています。

これは「キーボード全キー(100〜)」だけでは、
Shiftキーやスペースキーなどの入力が読み取れないため、
8方向+決定+キャンセル+サブ」の設定も行っています。



▼決定キーやキャンセルキーを離したら先に進む

自作メニューの処理などで、決定キーやキャンセルキーを押したあとに、
キーが押されている状態で先へ進むと何らかの不具合が発生する可能性がある場合は、
以下のように設定してください。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■ループ開始
|■キー入力:CSelf10[キーコード] 決定(10) キャンセル(11)
|■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
|-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
||■ループ中断
||■
|◇分岐終了◇
|■ウェイト:1 フレーム
|■
◇ループここまで◇◇


▲トップへ戻る▲


  
「キー入力受け付け」
■【使用例】「キーが押されるまで待つ」を自作する(クリック)

クリックの場合、キーボードのキー入力とは異なり、
キーが押されるまで待つ」を設定してクリックし続けても、何度も実行するような事はありません。

そのため以下のような設定を実行してクリックし続けても、
1回だけしかデバッグ文「クリックした」が実行されません。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[クリック][入力待ち] マウス 左クリック(20)
■デバッグ文:クリックした

しかしクリックだけでなく、キーボードの入力でも先へ進めるようにする場合や、
他に設定した処理が停止するのは困る場合は、自作のキー入力待ちの処理を設定する必要があります。



▼クリック、または何らかのキーが押されたら先に進む

クリック、または何らかのキーが押された時、処理を先へ進めます。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■変数操作: CSelf15[入力可能] = 0 + 0
■ループ開始
|■ウェイト:1 フレーム
|■キー入力:CSelf10[キーコード] 8方向 決定(10) キャンセル(11) サブキー(12)
|■キー入力:CSelf11[キーコード2] マウス 左クリック(20) 右クリック(21)
|■変数操作: CSelf10[キーコード] 下限= CSelf11[キーコード2] + 0
|■キー入力:CSelf11[キーコード2]キーボード(100〜)
|■変数操作: CSelf10[キーコード] 下限= CSelf11[キーコード2] + 0
|■条件分岐(変数): 【1】 CSelf10[キーコード] が 0 と同じ
          【2】 CSelf15[入力可能] が 0 と同じ
          【3】 CSelf10[キーコード] が 1 以上
|-◇分岐: 【1】 [ CSelf10[キーコード] が 0 と同じ ]の場合↓
||■変数操作: CSelf15[入力可能] = 1 + 0
||■
|-◇分岐: 【2】 [ CSelf15[入力可能] が 0 と同じ ]の場合↓
||■
|-◇分岐: 【3】 [ CSelf10[キーコード] が 1 以上 ]の場合↓
||■デバッグ文:クリック、または何らかのキーを実行
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇



▼処理を止めずにクリックを1回だけ実行

キーボードの入力では、セルフ変数[入力可能]を用意して処理していましたが、
クリックの場合は【変数操作+】の…
■変数操作+: CSelf10[クリック] = マウス左クリック状態
を使って設定すれば、セルフ変数[入力可能]を用意しなくても、
クリックした最初の1回だけイベントを実行させる事ができます。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■変数操作+: CSelf10[クリック] = マウス左クリック状態
■条件分岐(変数): 【1】 CSelf10[クリック] が 2 と同じ
-◇分岐: 【1】 [ CSelf10[クリック] が 2 と同じ ]の場合↓
|■デバッグ文:クリックした
|■
◇分岐終了◇


▲トップへ戻る▲


  
「自動キー入力」
■【使用例】キーボード入力を強制終了させる

イベントコマンド【文字列操作】にある【キーボード入力】を使い、プレイヤーに文字を入力してもらう際、
一定時間後に入力処理を強制終了させるイベントの設定方法を紹介します。





強制終了の方法は2種類あり、「Enter」か「Esc」のどちらかを選択してください。

▼「Enter」で強制終了
「あいう」を入力している時に強制終了した場合は、文字列変数には「あいう」が設定されます。

▼「Esc」で強制終了
「あいう」を入力している時に強制終了した場合は、文字列変数には何も文字列が設定されません。

なお「Esc」で強制終了させる場合は、
【キーボード入力】にある「キャンセル有」にチェックを入れてください。



時間の設定は、通常変数か予備変数を使って行います。
設定例では「予備変数1」の「0番」を使用しています。

時間は1フレーム単位でカウントするため、「1秒=60」で設定します。
5秒後に強制終了させる場合は、変数には「300」を設定します。



【キーボード入力】の強制終了を行うイベントはコモンイベントに設定してください。

▼「Enter」で強制終了
【イベントコード表示】【コモン出力ファイル】

■コモンイベント「キーボード入力強制終了」

起動条件:並列実行
起動条件変数:「V1-0:入力制限時間」が「1」「以上」

■ループ開始
|■ウェイト:1 フレーム
|■変数操作: V1-0[入力制限時間] -= 1 + 0
|■条件分岐(変数): 【1】 V1-0[入力制限時間] が 0 と同じ
          【2】 V1-0[入力制限時間] が -1 以下
|-◇分岐: 【1】 [ V1-0[入力制限時間] が 0 と同じ ]の場合↓
||▼ [Enter]を実行して強制終了
||■自動キー入力: キーボード入力 コード[ 128 ] ( Enterキー )
||■ループ中断
||■
|-◇分岐: 【2】 [ V1-0[入力制限時間] が -1 以下 ]の場合↓
||▼ プレイヤーが[Enter]を押して入力を終了させた
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇
■変数操作: V1-0[入力制限時間] = 0 + 0

▼「Esc」で強制終了
【イベントコード表示】【コモン出力ファイル】

■コモンイベント「キーボード入力強制終了」

起動条件:並列実行
起動条件変数:「V1-0:入力制限時間」が「1」「以上」

■ループ開始
|■ウェイト:1 フレーム
|■変数操作: V1-0[入力制限時間] -= 1 + 0
|■条件分岐(変数): 【1】 V1-0[入力制限時間] が 0 と同じ
          【2】 V1-0[入力制限時間] が -1 以下
|-◇分岐: 【1】 [ V1-0[入力制限時間] が 0 と同じ ]の場合↓
||▼ [Esc]を実行して強制終了
||■自動キー入力: キーボード入力 コード[ 101 ] ( ESCキー )
||■ループ中断
||■
|-◇分岐: 【2】 [ V1-0[入力制限時間] が -1 以下 ]の場合↓
||▼ プレイヤーが[Enter]を押して入力を終了させた
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇
■変数操作: V1-0[入力制限時間] = 0 + 0



【キーボード入力】を実行するイベントは以下のように設定します。
※入力制限時間が「2秒間(120フレーム)」の場合。

【イベントコード表示】

■変数操作: V1-0[入力制限時間] = 120 + 0
■文字列操作:S0[] = キーボード入力 10文字 [キャンセル可]
■変数操作: V1-0[入力制限時間] = 0 + 0


▲トップへ戻る▲



◎関連ページ

◆「イベントコマンド」って何?
┣◆文章の表示
┃┗◆特殊文字
┣◆選択肢
┃┗◆【使用例】選択肢
┣◆変数操作
┃┗◆演算子について
┣◆DB操作
┣◆文字列操作
┃┗◆【使用例】文字列操作
┣◆変数操作+
┃┣◆「X座標・Y座標」と「画面X座標・画面Y座標」の違い
┃┣◆【使用例】変数操作+の「キャラ」と「位置」
┃┗◆【使用例】変数操作+の「ピクチャ」と「その他」
┣◆条件(変数)
┣◆条件(文字列)
┣◆キー入力
┃┗◆【使用例】キー入力
┣◆ピクチャ
┃┗◆表示形式(通常・加算・減算・乗算)について
┣◆エフェクト
┃┗◆【使用例】エフェクト
┣◆サウンド
┣◆セーブ・ロード操作
┣◆パーティ画像
┣◆チップ処理
┃┗◆【使用例】チップ処理
┣◆場所移動
┣◆イベント制御
┃┣◆キャラクターの動作指定
┃┗◆【使用例】イベント制御
┣◆コモンイベント
┣◆ダウンロード
┗◆プロ版機能

YADOT-WOLFトップ  気紛れな空間へ戻る  メール