【解決済み】[自作プラグイン相談]装備画面で所持スキルを表示したい

HASEYAN

ユーザー
この場をお借りして失礼いたします。
こちらはJavaScriptはRPGツクールMZ以外では触れたことさえない素人です。

ゲームシステムに合わせたUIを用意するため、『Sceen_Equip』を自作プラグインで再定義してレイアウトを変えようと試みています。
既存のステータス表示や、装備スロットのウィンドウの配置を変えることには成功したのですが、新たにスキル一覧のウィンドウを追加することができません。
具体的にはウィンドウの枠の描画には成功しているのですが、肝心の中身の文字列が表示できません。

スキル一覧のウィンドウに関しては、『Sceen_Skill』から『createItemWindow』『itemWindowRect』に加えて『Window_Skilllist』を丸々とコピペして関数名を変更している形です。
どうやらコピペした際に定数(const)? の『skill』が上手く定義できていないのは理解できたのですが、そこから直し方がわからず……

皆さんの知識を貸していただけると幸いです。よろしくお願いいたします。
 

Attachments

  • customEquip.txt
    13.5 KB · 閲覧: 3
  • 相談用スクショ.png
    相談用スクショ.png
    385.1 KB · 閲覧: 16

DarkPlasma

ユーザー
レイアウト変更で思い通りにしたい場合は専用にコードを書くのが一番手っ取り早いですからね。良い挑戦だと思います。

1. シンタックスハイライトの効くエディタ​

まず、シンタックスハイライトの効くエディタを使用しましょう。
skillのSが意図せず大文字になってしまっている箇所があります。
シンタックスハイライトが効いていると、こういう凡ミスを視覚的にわかりやすく表示してくれます。
Visual Studio Codeが軽量でオススメです。

2. includes メソッド​

さて、対象ウィンドウに何も表示されない原因のひとつは、 includes メソッドの結果が真となるようなスキルがないからです。

Window_SkillList クラスは元々、スキルをスキルタイプ別に表示するコードになっています。
表示するスキル一覧を作っているのは makeItemList メソッドで、コード中の this._data が表示するスキル一覧です。
今のコードでは、スキルタイプの指定が0(なし)になっていて、該当するスキルを習得していない場合は this._data が空配列になり、何も表示されません。
JavaScript:
this._data = this._actor.skills().filter(item => this.includes(item));
このコードでは、アクターの習得している、または特徴によって追加されたスキルの一覧の中から、 this.includes(item) で評価される真偽値が真であるようなスキルのみになるようフィルタして、その結果を this._data に代入しています。
ツクールMV,MZの一覧系ウィンドウクラスの includes メソッドは、引数として渡された要素を表示要素一覧に含めるかどうかを返します。
(スキルリスト以外でも、ツクールMV,MZでは同じ仕組みがあちこちにあります)

表示したいスキルはどんな条件を満たすものなのかによって、 includes メソッドの中身を書き換えてあげると良いと思います。
ひとまず、スキルタイプの条件を外すなら、以下のように修正します。
JavaScript:
Window_EquipUdemaeSkill.prototype.includes = function(item) {
  return !!item;
};

3. itemAt メソッド​

2を解決しても、まだ表示したいスキル数分だけ黒枠が表示されるだけです。
itemAt メソッドも Window_SkillList からコピーしてきているので、呼び出し方は this.itemAt(index) としましょう。

Window_SkillList のメソッドを呼び出すにしても、 this を束縛しないと意図通りに動きません。
this については正確な説明をしようとすると複雑になりすぎるのでここでは控えます。

Window_EquipUdemaeSkill クラスは itemAt メソッドを持っているので、同じクラスのメソッドから this.itemAt(引数) で呼び出せる、ということだけご理解いただければ、今のところは問題ありません。
 
最後に編集:

HASEYAN

ユーザー
>>DarkPlasmaさん

頂いた解説を元にソースコードを書き換えたところ、無事に動作させることが確認できました!
こんなご丁寧に説明していただき、ありがとうございます!!

上手く動作しなかった理由も解説を読んで恐らく理解できたと思うのでまた一歩、知識を増やすことが出来ました。

大文字小文字が間違えていたり、スキルタイプの設定を忘れていたり、色々と問題だらけでしたね……
早速、VisualStudioはインストールしてみました。


一人では解決できるか怪しかったので、本当に助かりました! 改めてありがとうございます!!
 
トップ