RPGツクールMVのメインメニューの左側のコマンドを追加する方法
この記事ではRPGツクールMVでのメインメニュー(アイテムとかステータスとかセーブとかができる画面) に自作のコマンドを追加する方法を紹介していく。
やり方
すでにScene_ExStatus
というシーンクラスを作成しているという前提で話を進めていく。
結論から言うと、以下のようなコードを書けばよい。
// メニューコマンドウィンドウにステータスコマンドを追加
const _Window_MenuCommand_addOriginalCommands = Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function () {
_Window_MenuCommand_addOriginalCommands.call(this);
this.addCommand('Exステータス', 'exStatus');
};
// メニューシーンにステータスコマンドの処理を追加
const _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function () {
_Scene_Menu_createCommandWindow.call(this);
this._commandWindow.setHandler('exStatus', this.commandExStatus.bind(this));
};
Scene_Menu.prototype.commandExStatus = function () {
SceneManager.push(Scene_ExStatus);
};
以下はそれぞれのメソッドについて補足していく。
Window_MenuCommand.prototype.addOriginalCommands
Window_MenuCommand
とはメインメニューの左側にあるコマンド画面のこと。
アイテムとかステータスとかセーブとかがあるウィンドウのこと。
Window_MenuCommand
クラスにはaddOriginalCommands
メソッドという、まさに自作のコマンドを追加できるメソッドが
用意されているので、これをオーバーライドすることで自作のコマンドを追加できる。
自作コマンドを追加するには、addCommand
メソッドを使うとよい。
第1引数にはメニュー名(画面に表示される)を指定し、第2引数にはシンボル(どのメニューがクリックされたかをプログラム側が識別するためのもの)を指定する。
// メニューコマンドウィンドウにステータスコマンドを追加
const _Window_MenuCommand_addOriginalCommands = Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function () {
_Window_MenuCommand_addOriginalCommands.call(this);
this.addCommand('Exステータス', 'exStatus');
};
詳細は以下の記事を見るとよい。
- 参考:corescript/js/rpg_windows/Window_MenuCommand.js at master · rpgtkoolmv/corescript
- 参考:Class: Window_Command
Scene_Menu.prototype.createCommandWindow
さて、さきほどWindow_MenuCommand
で自作コマンドを追加したが、コマンドが実行した後の挙動をしてしていない。
そこでScene_Menu
クラスを拡張することで、Exステータス
がクリックされた時の挙動を指定する必要がある。
やり方としては、Scene_Menu.prototype.createCommandWindow
の中でthis._commandWindow.setHandler
で
挙動を追加してあげるとよい。
this._commandWindow
プロパティには先ほどのWindow_MenuCommand
クラスのインスタンスが格納されている。
setHandler
は第1引数にシンボル、第2引数にシンボルが呼び出された時の処理を記述する。
// メニューシーンにステータスコマンドの処理を追加
const _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function () {
_Scene_Menu_createCommandWindow.call(this);
this._commandWindow.setHandler('exStatus', this.commandExStatus.bind(this));
};
Scene_Menu.prototype.commandExStatus = function () {
SceneManager.push(Scene_ExStatus);
};