ツクールMVでは、条件分岐の条件の1つに『ボタン○○が押されている』というものがあります。

j1


これは文字通りそのボタンが押されていたら条件を満たすという意味ですが、キー入力の判定をこのイベントコマンドだけでやろうとすると少し融通の利かない部分があります。
そこで今回はスクリプトを使った色々なキー入力判定の仕方を紹介します。


まず最初にイベントコマンドの『ボタン○○が押されている』時ですが、 これはそのボタンが押されていれば常に条件を満たすことになります。
アクションゲームやシューティングゲームで例えると、ボタンを押した時にショットを撃つタイプ(連射するにはボタンを連打しないといけないタイプ)と、ボタンを押しっぱなしにしていれば勝手に連射してくれるタイプがありますよね。
このイベントは、後者の押しっぱなしにしていれば連射扱いになるようなタイプです。
連射させたくない時でも勝手に連射になってしまいます。

そこで、前者のように押した瞬間だけ判定する時には次のスクリプトを使うといいです。

Input.isTriggered('○○')

○○の部分にはキーの名前を入れます。
キーの名前は
決定キー ・・・ ok
キャンセルキー ・・・ cancel
シフトキー ・・・ shift
下キー ・・・ down
左キー ・・・ left
右キー ・・・ right
上キー ・・・ up
ページアップキー ・・・ pageup
ページダウンキー ・・・ pagedown

です。

たとえば決定キーを押したかどうかを判定したいという時には

j2

このように、条件分岐4ページ目の一番下にある『スクリプト』に、上のスクリプトを書けばいいです。
ok や cancel などのキーの名前はコロン、またはセミコロンで囲ってください。



次に、キーを押している間常に条件を満たすようにしたい時のスクリプトです。
つまりイベントコマンドでキー入力の判定をするのと同じなのですが、一応スクリプトも紹介しておきます。

Input.isPressed('○○')

これも同じように○○の部分にキーの名前を入れます。


さて、キーを押した瞬間のみ判定、押している間常に判定、の2つのスクリプトを紹介しましたが、キー入力の判定のタイミングに関してもう1つバリエーションがあるのですが分かりますか?
MVでは、ボタンを長押ししている時を判定するスクリプトも用意されています。
長押しの判定をするスクリプトは

Input.isRepeated('○○')

です。
長押しというのは具体的には24フレームに設定されているようです。
指定したキーが24フレーム以上押され続けていると条件を満たすことになります。

(24フレームというのは、rpg_core.js 2490行目あたりの Input.keyRepeatWait = 24; で設定されています。
 この数字を大きくすると長押し判定になるまでの猶予を伸ばせます)



まとめるとこうなります。

Input.isTriggered('○○') ・・・ 押した瞬間だけ条件を満たす
Input.isPressed('○○') ・・・ 押している長さに関係なく押してる間ずっと条件を満たす
Input.isRepeated('○○') ・・・ 24フレーム以上押し続けていると条件を満たす

これらを上手く使い分ければ、色々な仕掛けを作る時に役に立つかもしれません。




・中級編 使用できるキーを増やす

イベントコマンドの項目にあるキーは決定、キャンセル、シフト、4方向、ページアップ、ページダウンのみですが、
実は他にもいくつかのキーが使えるようになっています。
MVで使えるキーは、rpg_core.jsの2548行目あたり(コアスクリプトのバージョンによって少しずれます)からの

j3

ここで登録されています。
左の列に書かれている数字がパソコン内で決められている各キーの番号で、その次に茶色っぽい文字で書かれているのがMV側で各キーに付けた名前です。(緑の文字は注釈)
先ほどのスクリプトで○○の部分に書いていたキーの名前は、この茶色い文字で定義されているものですね。
なので先ほど説明したもの以外にもたとえば Input.isTriggered('tab') でタブキーを押した判定を取得することもできます。

この Input.keyMapper の配列に要素を追加することで、他のキーも使えるようになります。
そのためにはまずパソコン内で決められている各キーの番号を調べないといけませんが、これは『パソコン キーコード』等でネット検索すれば出てきます。

キーコード一覧
http://faq.creasus.net/04/0131/CharCode.html
こちらのサイトを見てみると、たとえばAキーは65番だということが分かります。
これを Input.keyMapper に追加するには
Input.keyMapper[65] = 'A'
というように書けばいいです。
これはどこに書くのかというと、ミニゲームなどで一時的に使うだけならイベントコマンドのスクリプトでもいいですが、プラグインにした方がいいと思います。

(function () {
    Input.keyMapper[65] = 'A';
//同様に使用したいキーを登録していく
//
//

})();

これだけです。
これで Input.isTriggered('A') でAキーの入力判定が出来るようになります。