RPGツクールMV

Window_Selectableで選択している項目におうじて表示を切り替えるウィンドウを作る

Window_Selectableの setHelpWindowメソッドを使うと、選択している項目におうじて表示を切り替えるウィンドウを作ることができます。

↓こんなウィンドウが作れます。
RPGツクールMV Window_Selectableで選択した項目におうじて表示を切り替えるウィンドウを作る サンプルコード3実行結果

この記事では、setHelpWindowメソッドを使って選択している項目におうじて表示を切り替えるウィンドウを作る方法を解説します。

このブログの記事は厳密な正確さよりも、わかりやすさを重視して書いてあるので、あらかじめご了承ください。

武器を選択できる一覧を作る

とりあえず、てきとうにデータベース「武器」に登録されている項目を表示するウィンドウを作ってみます。

サンプルコード1

サンプルコード1の実行結果

RPGツクールMV Window_Selectableで選択した項目におうじて表示を切り替えるウィンドウを作る プラグインコマンド呼び出し RPGツクールMV Window_Selectableで選択した項目におうじて表示を切り替えるウィンドウを作る サンプルコード1実行結果

Scene_MenuBaseから派生させた自作クラスScene_SelectableHelpWindowSampleと、Window_Selectableから派生させた自作クラスWindow_MyIndexListを定義し、ウィンドウを表示しています。

ここらへんはRPGツクールMVのプラグインで一覧から項目を選択するウィンドウを作るでも解説しているので、もしよければそちらも参考にしてください。

ヘルプウィンドウを表示する

つぎに、ヘルプウィンドウを作って説明を表示させてみます。

シーンの定義と一覧ウィンドウの定義にすこし追加しています。

サンプルコード2

サンプルコード2の実行結果

RPGツクールMV Window_Selectableで選択した項目におうじて表示を切り替えるウィンドウを作る サンプルコード2実行結果

サンプルコード2の解説

Window_SelectableはhelpWindowという子ウィンドウを持っています。

Window_Selectableの setHelpWindow メソッドで、ヘルプウィンドウを設定できます。

setHelpWindow メソッドで設定するウィンドウは、RPGツクールMV内部(rpg_windows.js)で定義されているWindow_Helpか、Window_Helpから継承した(派生させた)ウィンドウを指定します。

つぎに、ヘルプウィンドウの更新処理を作ります。

Window_Selectableには updateHelpというメソッドが定義されています。

Window_Selectableではselectメソッドが実行されると、callUpdateHelpメソッドを経由してupdateHelpメソッドが呼ばれます。

Window_Selectableで定義されている元々のupdateHelpメソッドは、helpWindow.clearをしているだけで更新処理が書かれていないため、そのままではヘルプウィンドウが更新されません。

自作したWindow_MyIndexListに同名のメソッドを定義し、メソッドを上書き(オーバーライド)します。

Window_Selectableには引数で指定したオブジェクトをヘルプウィンドウに渡す setHelpWindowItemメソッドがあるので、updateHelpメソッドの中で呼び出しています。

Window_Helpは、setHelpWindowItemメソッドで渡されたアイテムのdescriptionプロパティの値をウィンドウに表示します。

文字以外も表示できるヘルプウィンドウを作る

Window_Helpをそのまま使うと、ちょっと不便なところもあります。

  • ウィンドウの位置やサイズをインスタンス生成時に指定できない
  • descriptionプロパティを持ったオブジェクトしか渡せない
  • テキストしか表示できない

そこで、HelpWindowから派生させたWindow_HelpExを作って便利にしてみます。

サンプルコード3

※一覧ウィンドウの定義のあとに、ヘルプウィンドウの定義を追加。

サンプルコード3実行結果

RPGツクールMV Window_Selectableで選択した項目におうじて表示を切り替えるウィンドウを作る サンプルコード3実行結果

サンプルコード3解説

Window_SelectableとWindow_Helpの処理をみて、どこをオーバーライドするかを考えます。

rpg_window.jsのコードを追っていくと、

  1. Window_SelectableのsetHelpWindowItemメソッドからWindow_Helpの setItemメソッドが呼ばれる
  2. Window_Helpは引数で渡されたオブジェクトのdescriptionプロパティを引数にして、自身の setTextメソッドを呼び出す
  3. setTextメソッド内で、内部プロパティにdescriptionの値を代入し、 refreshメソッドを呼び出す
  4. refreshメソッド内でdrawTextExでテキストを書きだす

という処理をしていることがわかりました。

2番めのdescriptionを渡してsetTextメソッドを呼び出すところと、最後のrefreshメソッドの描画内容を変更したのが変更後のコードになります。
(3番めのsetTextメソッドは使わないように変更)

ウィンドウの内容を描画する処理は個別にわけた方が見やすいので、新しく drawContentメソッドを作ってrefreshメソッドから呼び出すことにしました。

setItemメソッドでdescriptionの値ではなく渡されたオブジェクトをそのまま使うようにしたので、description以外のプロパティの値も使えます。

選択している項目におうじて表示を切り替えるウィンドウを作るまとめ

まとめ
  • Window_Selectableを元にしたウィンドウクラスを作る
  • setHelpWindowメソッドを使って、Window_Helpを設定
  • Window_SelectableのupdateHelpをオーバーライドする
  • descriptionプロパティ以外の値を表示させたい時はWindow_Helpを元にしたウィンドウクラスを作る

setHelpWindowItemメソッドで渡すitemはどんな値でもいいので、オブジェクトを自作して、独自のメニューを作ってみてもよいかと思います。

RPGツクールMV Window_Selectableで選択した項目におうじて表示を切り替えるウィンドウを作る おまけ実行結果独自オブジェクトを使って行先選択システムっぽいのを作ってみた

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください