【解決済】戦闘画面での文字表示を変更したい

返信する
ナナカマド
記事: 14
登録日時: 2023年8月12日(土) 14:36

【解決済】戦闘画面での文字表示を変更したい

投稿記事 by ナナカマド »

戦闘画面のHPなどの文字表示を非表示にする方法があれば教えていただきたいです。(添付画像の赤四角部分)
色々調べてみて、文字表示部分はdrawActorHp()内を編集するところまで分かりましたが、文字自体を非表示にする方法までは分かりませんでした。

データベースの用語欄からHP部分を空にした場合、戦闘だけでなく通常画面でもHP部分が非表示になるため求めている内容ではありませんでした。
ツクールの仕様的に難しいなどの場合でも諦めがつきますので、有識者の方が居られましたら知恵をお貸しいただけないでしょうか。
添付ファイル
8b12e7fe62cb56cbdbe24863decfadea.png
8b12e7fe62cb56cbdbe24863decfadea.png (22.31 KiB) 閲覧された回数 1015 回
最後に編集したユーザー ナナカマド [ 2023年8月13日(日) 16:01 ], 累計 1 回
名無し蛙
記事: 352
登録日時: 2015年11月23日(月) 02:46

Re: 戦闘画面での文字表示を変更したい

投稿記事 by 名無し蛙 »

そこまで分かっているのならdrawActorHp()をオーバーライドすると良いでしょう。
戦闘画面でステータスを表示しているウィンドウはWindow_BattleStatusと言います。
Window_BattleStatusはWindow_Selectableを継承しており、
Window_SelectableはWindow_Baseを継承しています。
継承元の全てのクラスの性質を継承先で利用出来る為、
Window_BattleStatusもWindow_Baseで定義したdrawActorHp()を使用出来る、
というのがOOPの基本的な知識なのですが
継承元で定義したメソッドを継承先で上書き定義する事をオーバーライドと呼びます。

プラグイン化するならこんな感じですか。

コード: 全て選択

(() => {
    'use strict'

    Window_BattleStatus.prototype.drawActorHp = function(actor, x, y, width) {
        width = width || 186;
        var color1 = this.hpGaugeColor1();
        var color2 = this.hpGaugeColor2();
        this.drawGauge(x, y, width, actor.hpRate(), color1, color2);
        // this.changeTextColor(this.systemColor());
        // this.drawText(TextManager.hpA, x, y, 44);
        this.drawCurrentAndMax(actor.hp, actor.mhp, x, y, width,
                               this.hpColor(actor), this.normalColor());
    };
})();
戦闘画面のHPなど、と書いてあるという事はMPやTPも埒内だと思いますけど
同じ要領で消す他ないと思います。
ナナカマド
記事: 14
登録日時: 2023年8月12日(土) 14:36

Re: 戦闘画面での文字表示を変更したい

投稿記事 by ナナカマド »

ありがとうございます!HP表記を非表示にすることができました。
>>継承元で定義したメソッドを継承先で上書き定義する事をオーバーライドと呼びます。
ありがとうございます、覚えておきます。

情報後出しになってしまい大変恐縮なのですが、現在バトル画面の任意の場所にHPゲージを表示させるプラグインを見よう見まねで作っている最中でして
そのプラグインで表示させたゲージのHP表記はいまだ非表示にすることが出来ない状態です。

もしよろしければコードの問題点などお教えいただけないでしょうか?
添付ファイル
755c0a62f546d514c6eedea2a7f94c3c.png
755c0a62f546d514c6eedea2a7f94c3c.png (117.87 KiB) 閲覧された回数 931 回
最後に編集したユーザー ナナカマド [ 2023年8月13日(日) 17:53 ], 累計 1 回
名無し蛙
記事: 352
登録日時: 2015年11月23日(月) 02:46

Re: 戦闘画面での文字表示を変更したい

投稿記事 by 名無し蛙 »

完全独学だと仕方が無いと思いますけど色々と手直ししたいところが多いですね…
まず変更が反映されない理由は明白で

コード: 全て選択

    Player_Info.prototype.drawActorHp = function(actor, x, y, width) {
        width = width || 186;
        var color1 = this.hpGaugeColor1();
        var color2 = this.hpGaugeColor2();
        this.drawGauge(x, y, width, actor.hpRate(), color1, color2);
        //this.changeTextColor(this.systemColor());
        //this.drawText(TextManager.hpA, x, y, 44);
        this.drawCurrentAndMax(actor.hp, actor.mhp, x, y, width,
                               this.hpColor(actor), this.normalColor());
    };

	function Player_Info() {
	    this.initialize.apply(this, arguments);
	}

	Player_Info.prototype = Object.create(Window_Base.prototype);
	Player_Info.prototype.constructor = Player_Info;
	Player_Info.prototype.initialize = function() {
		var x = 0;
		var y = 0;
	    var width = 200;
	   var height = 100;
	 Window_Base.prototype.initialize.call(this, x, y, width, height);
	};
Player_Infoを定義する前にdrawActorHpをオーバーライドしているからです。
コンストラクタ(Player_Info.prototype.initialize)の定義の下に位置を入れ替えるだけで解決します。

で、それとは別に構造的な問題が大別して2種類抱えています。
一つはインデント(字下げ)に関する問題。
プログラマはインデントに関して偏執的なまでに拘ります。
javascriptならば{}で囲った内側を半角スペース4文字分下げる、で徹底していて
例外的な事情がない限りこの法則を無意味に崩す事はありません。
これは法則性を遵守する事で可読性、ひいては保守性を向上させる事が目的です。

特に

コード: 全て選択

   var _Scene_Battle_create = Scene_Battle.prototype.create;
ここで全角スペースで字下げしていますけど、これは特にバグの温床になり易く忌避されます。
VSCode等コーディング専用のテキストエディタを使用する事で回避出来ると思うので導入した方が良いでしょう。

もう一つは命名規則に関する問題です。
これは海外プログラマと日本のプログラマとでも重要視するか否か意識に差があるんですけど
ツクールMVのコアスクリプトでは変数名、関数名、クラス名等は一定の法則に基づいて命名されていて
特に日本のプラグイン作者もその命名規則に従う傾向にあります。
これも法則性を遵守する事で意図を読み解きやすく、バグ発見効率を上げる可読性・保守性に直結する為です。

まず変数名、関数名を付ける場合はキャメルケースという命名規則に則っています。
名前が英単語一つで収まる場合は全て小文字、
2単語以上連続する場合は2単語目から頭文字を大文字にする、という規則です。
更に変数の中でもメンバ変数と呼ばれるものには先頭に_を付けます。

コード: 全て選択

this._My_Window = new Player_Info();
このthis._My_Windowと言う変数も既存の命名規則に従うならthis._myWindowという名前になります。
他にもクラス名なら全ての単語の先頭文字を大文字にするパスカルケース
定数なら全ての文字を大文字にするコンスタントケース、グローバル変数を作る場合は先頭に$を入れる等
色々とルールがあるのですが今全てを理解するのは難しいと思います。
みんなこの辺にも気を遣っているという事だけ意識して可能なら真似てください。
それと揚げ足取りをする訳ではないのですが、ファイル名のHPGage_test.jsは正しくはGaugeです。
こういうスペルミスも混同して使用して後々バグの温床になるのが定番なので気付いたら直した方が良いでしょう。

他にも細かいところはあるんですけど更に専門的な話になるので割愛します。
とりあえずPlayer_Info.prototype.drawActorHpの位置を入れ替えて
今後、インデントと命名規則に気を遣ってコーディングした方が良いでしょう。
ナナカマド
記事: 14
登録日時: 2023年8月12日(土) 14:36

Re: 戦闘画面での文字表示を変更したい

投稿記事 by ナナカマド »

早々のお返事ありがとうございます!
ご指摘いただいたようにオーバーライドの位置を変更することで希望していた動作を確認することができました。

また、コーディングの知識や考え方についてもお教えいただき大変勉強になりました。
知識不足の状態で既存のコードやデータを切り貼りして構築していたような状態でしたので基本的な部分が疎かになっていました。
全角スペース字下げがバグの温床になるなど目から鱗でした。以後気を付けます。

改めまして、本件並びに追加の質問やプラグインの修正などご対応いただきましてありがとうございました。
返信する

“MV:質問”に戻る