基本的な使い方
RPGツクールMZの入力処理は2つのクラス、rmmz_core.jsのInput、及びTouchInputを利用する。共にシングルトンであり、どの場面でも同じように使用することができる。書き方も簡単で以下のようになる。
if (Input.isPressed("ok"))
{
//okボタンが押されている時の処理
}
if (TouchInput.isPressed())
{
//画面がタッチされている時の処理
}
Inputでキーボードやゲームパッドのボタンやキーを「ok」などのマッピング置換しており、例えばokはキーボードだとenter,space,zキーを押した場合に反応、ゲームパッドだとAボタンを押した場合に反応する。TouchInputの場合、マウスが左クリックされているか画面にタッチしている場合に反応する。
イベントの条件分岐でも使用することができる。
下矢印、又は2ボタンを押下している場合に条件分岐するスクリプトとなる。押下条件を追加したい場合は条件分岐イベントを2つ作るか間に「 || 」をつけつつ追加することもできる。
「Input.isPressed(“down”) || TouchInput.isPressed()」と入力しています。下矢印、又は2ボタン、画面タッチ状態、マウス左ボタンクリック状態なら条件分岐する。
マッピングキー一覧
以下はInputで使用するマッピングキーの一覧だ。
マッピング名 | キーボード | ゲームパッド |
---|---|---|
left | 左矢印, 4 | D-Pad左 |
up | 上矢印, 8 | D-Pad上 |
right | 右矢印, 6 | D-Pad右 |
down | 下矢印, 2 | D-Pad下 |
ok | enter, space, Z | A |
cancel | B | |
shift | shift | X |
menu | Y | |
pageup | pageup, Q | LB |
pagedown | pagedown, W | RB |
escape | escape, insert, X, 0 | |
tab | tab | |
control | control, alt | |
debug | F9 |
入力チェック一覧
Inputの入力チェックは主に4種類。()の中にマッピング名が必要。
メソッド名 | 効果 | 概要 |
---|---|---|
Input.isPressed(マッピング名) | 指定キーが押されているか? | |
Input.isTriggered(マッピング名) | 指定キーが押された瞬間か? | ボタンを押した瞬間の1フレームのみ。 |
Input.isRepeated(マッピング名) | 指定キーが押され続けている場合、定期的にtrueになる。 | ボタンを押して24フレーム経過後、6フレーム毎にtrueになる。 |
isLongPressed(マッピング名) | 指定キーが押され続けているか | ボタンを押して24フレーム経過後以降trueになる |
TouchInputの入力チェックは9種類。
メソッド名 | 効果 | 概要 |
---|---|---|
TouchInput.isClicked() | 左クリック・タッチが可能か? | 画面未タッチ、マウスボタン未押下状態、且つ移動中でない場合true |
TouchInput.isPressed() | 左クリック・タッチ状態か? | マウス左ボタン押下状態、又は(画面タッチ状態且つ画面日本指未タッチ状態) |
TouchInput.isTriggered() | トリガー状態か? | isPressedの1フレーム目。 |
TouchInput.isRepeated() | 左クリック・タッチされ続けている場合、定期的にtrueになる。 | isPresse同条件で押下が続くと24フレーム経過後、6フレーム毎にtrueになる。 |
TouchInput.isLongPressed() | クリック・タッチされ続けているか | isPresse同条件で押下が続くと24フレーム経過後以降trueになる |
TouchInput.isCancelled() | 日本指タッチ、あるいはマウス右ボタン押下か? | |
TouchInput.isMoved() | 左クリック・タッチ状態で、マウス、及び指が移動したか? | isPressed経過後、10px以上画面上の指、及びマウスの位置が動いたらtrueになる。 |
TouchInput.isHovered() | 左ボタンが押されていない状態でマウスが移動したか? | isMovedの条件を満たさない時にマウスの位置が動いたらtrue |
TouchInput.isReleased() | isPressed後、ボタン・画面から指が離れる。 |
マッピングキーを追加する
キーボードのキーコードは以下のサイトで確認することができる。このキーコードを参考に新しいキーの登録が可能となる。(ゲームパッドのキーコードが書かれたサイトは見つからなかった……。)
例として、以下は入力キーを増やすサンプルだ。キーボードはInput.keyMapper[対応するキーコード] = マッピング名、ゲームパッドはInput.gamepadMapper[対応するキーコード] = マッピング名でキーをマッピングできる。プラグインで作ったが、イベントでそのキーを使用する前にスクリプトで宣言をkeyMapper,gamepadMapperを定義しておけばプラグイン無しでも問題ない。
/*:
* @plugindesc サンプルPlugin
* @target MZ
* @help
* 入力キーを増やすサンプル
* 1.WASDボタンで既存の上下左右と同じ挙動をするようにする。
* 2.キーボードのGボタン、及びゲームパッドのスタートボタンを「Start」と名付ける。
*/
(() => {
Input.keyMapper[87] = 'up'; //Wボタン
Input.keyMapper[65] = 'left'; //Aボタン
Input.keyMapper[83] = 'down'; //Sボタン
Input.keyMapper[68] = 'right'; //Dボタン
Input.keyMapper[71] = 'start'; //Gボタン
Input.gamepadMapper[6] = 'start'; //ゲームパッドのL2ボタン
})();
up,left,down,rigthはすでにキャラやコマンドに移動用に存在しているマッピングだ。WASDボタンをそれぞれに定義してあげると、矢印キーの他にWASDでも同様の挙動をする。startはオリジナルのマッピング名だ。キーボードとゲームパッドで同じ名前なので、Gボタン、ゲームパッドL2ボタンのどちらを押した時でも反応するようになる。これで上記で紹介した条件分岐のイベントでstartをマッピングとして使用した場合はG,L2ボタン押下反応を見て分岐するようになる。
入力処理のサンプル
以下は、Sampleという文字が浮かぶ新規シーンを作成するプラグインだ。Sample文字は移動キー、及びWASDで移動し、キーボードG、及びゲームパッドのL2ボタンを押下、画面をタッチ、マウスをクリックしている間のみ文字が画面から消える。
/*:
* @plugindesc サンプルPlugin
* @target MZ
* @help
* Sample文字を自由に動かせるSceneクラス。プラグインコマンドで該当シーンに移動する。
* 方向キー、及びWASDでSample文字が移動、キーボードG、ゲームパッドL2ボタン押下していると
* Sample文字が消える。
*
* @command openScene
* @text シーン開始
* @desc サンプルシーンの開始。
*
*/
(() => {
const pluginName = document.currentScript.src.match(/^.*\/(.*).js$/)[1];
//キーマッピングの追加
//WASDで方向移動、Gボタン、及びゲームパッドのL2ボタンでキーマッピング「start」を定義
Input.keyMapper[87] = 'up'; //Wボタン
Input.keyMapper[65] = 'left'; //Aボタン
Input.keyMapper[83] = 'down'; //Sボタン
Input.keyMapper[68] = 'right'; //Dボタン
Input.keyMapper[71] = 'start'; //Gボタン
Input.gamepadMapper[6] = 'start'; //ゲームパッドのL2ボタン
// Plugin Command
PluginManager.registerCommand(pluginName, "openScene", () => {
SceneManager.push(Scene_Sample);
});
class Scene_Sample extends Scene_Base {
create() {
super.create();
//「サンプル」と書かれた文字を表示
this._text = new Sprite(new Bitmap(Graphics.width, Graphics.height));
this._text.bitmap.drawText("Sample", 0, 0, Graphics.width, Graphics.height, "center");
this._text.x = (Graphics.width - this._text.bitmap.width) / 2;
this._text.y = (Graphics.height - this._text.bitmap.height) / 2;
this.addChild(this._text);
}
update() {
super.update();
//入力処理
this.updateInput();
if (Input.isPressed("start") || TouchInput.isPressed())
{
//キーボードG、及びゲームパッドL2ボタン押されている時にSample文字を隠す
this._text.opacity = 0;
} else {
//キーボードG、及びゲームパッドL2ボタン押されていない時にSample文字を表示
this._text.opacity = 255;
}
}
updateInput() {
const speed = 5;
//方向キー押下で文字を移動する。
if (Input.isPressed("left")) {
this._text.x -= speed;
}
if (Input.isPressed("right")) {
this._text.x += speed;
}
if (Input.isPressed("up")) {
this._text.y -= speed;
}
if (Input.isPressed("down")) {
this._text.y += speed;
}
if (Input.isTriggered("cancel")) {
SceneManager.pop();
}
}
}
})();
関連リンク
当サイトのRPGツクールMZプラグイン開発のトップページ。他の記事へのリンクをまとめている。