ページ 11

【解決】AltMenuScreen改変でレベル表示の幅指定ができない

Posted: 2020年2月24日(月) 15:25
by ムノクラ
公式プラグインAltMenuScreenの改変を先日試みました。
8人パーティで試した所、下記のような表示になってしまいます。

レベル表示だけが縮まらない状態です。

コード: 全て選択

this.drawActorLevel(actor, x, bottom - lineHeight * 4, width);
どこを変更すると名前のように枠に収まるのか、ご指導お願いいたします。
SS02.png
MNKR_AltMenuScreen.js
(3.24 KiB) ダウンロード数: 3 回
追記

コアをGrepしたら

コード: 全て選択

Window_Base.prototype.drawActorName = function(actor, x, y, width) {
Window_Base.prototype.drawActorLevel = function(actor, x, y) {
と根本的に仕様が違っていて、レベルにはそのままではwidthが働かないということでしょうか?

Re: AltMenuScreen改変でレベル表示の幅指定ができない

Posted: 2020年2月24日(月) 15:55
by 剣崎 宗二
ムノクラ さんが書きました:と根本的に仕様が違っていて、レベルにはそのままではwidthが働かないということでしょうか?
現コアの仕様上はその通りです。
改変の為には一例として以下。

コード: 全て選択

Window_Base.prototype.drawActorLevel = function(actor, x, y, width) {   //widthを受け入れるようにする
    var internalWidth = width;
    if (!internalWidth)
    {
        //widthが提供されてない際の対処(実質undefined)としてデフォルト値セット
        internalWidth = 120; 
    }
    
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.levelA, x, y, 48);
    this.resetTextColor();
    this.drawText(actor.level, x + internalWidth - 38, y, 36, 'right'); //数値の相対位置をwidthにも依存するよう改変。右寄せの為やや多めに幅取り
};

Re: AltMenuScreen改変でレベル表示の幅指定ができない

Posted: 2020年2月24日(月) 16:19
by ムノクラ
剣崎 宗二 さんが書きました:
ムノクラ さんが書きました:と根本的に仕様が違っていて、レベルにはそのままではwidthが働かないということでしょうか?
現コアの仕様上はその通りです。
改変の為には一例として以下。

コード: 全て選択

Window_Base.prototype.drawActorLevel = function(actor, x, y, width) {   //widthを受け入れるようにする
    var internalWidth = width;
    if (!internalWidth)
    {
        //widthが提供されてない際の対処(実質undefined)としてデフォルト値セット
        internalWidth = 120; 
    }
    
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.levelA, x, y, 48);
    this.resetTextColor();
    this.drawText(actor.level, x + internalWidth - 38, y, 36, 'right'); //数値の相対位置をwidthにも依存するよう改変。右寄せの為やや多めに幅取り
};
SS03.png
希望通りの動作となりました。
ありがとうございます。

ご指導いただいたコードは何となく何をしているのかは分かる気がするのですが、同じdrawTextを使用している名前や職業のコードをコピーしても思うようには動かなかったのが、未だに理解できていません。

コード: 全て選択

Window_Base.prototype.drawActorLevel = function(actor, x, y, width) {
    width = width || 168;
でwidthが動作するかは試したのですが、動きませんでした。

この差のヒントになりそうな、箇所はないでしょうか?

Re: AltMenuScreen改変でレベル表示の幅指定ができない

Posted: 2020年2月24日(月) 18:20
by 剣崎 宗二
「何故動かないか」については関連する部分のコードを全部出して頂かないと分かりませんが、ざっくりで可能性を言えば「drawText自体のパラメーターにwidthが組み込まれていないと当然影響されません」ですね。

数値が間違っている事を疑っている際は、console.logを差し込みその変数の中身を見てみましょう。
逆に数値が正しいのに動作が不可解な場合は、「その数値は本当に正しいスロット(パラメーター)に差し込まれていますか?」

Re: AltMenuScreen改変でレベル表示の幅指定ができない

Posted: 2020年2月25日(火) 12:21
by ムノクラ
剣崎 宗二 さんが書きました:「何故動かないか」については関連する部分のコードを全部出して頂かないと分かりませんが、ざっくりで可能性を言えば「drawText自体のパラメーターにwidthが組み込まれていないと当然影響されません」ですね。

数値が間違っている事を疑っている際は、console.logを差し込みその変数の中身を見てみましょう。
逆に数値が正しいのに動作が不可解な場合は、「その数値は本当に正しいスロット(パラメーター)に差し込まれていますか?」
動かないと思っていたコードを書き出しながら、質問を整理していたら、ミスが理解できました。

動かなかったコードその1

コード: 全て選択

Window_Base.prototype.drawActorLevel = function(actor, x, y, width) {
    width = width || 168;
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.levelA, x, y, 48);
    this.resetTextColor();
    this.drawText(actor.level, x + 84, y, 36, width, 'right');
};
動いたコード

コード: 全て選択

Window_Base.prototype.drawActorLevel = function(actor, x, y, width) {
    width = width || 168;
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.levelA, x, y, 48);
    this.resetTextColor();
    this.drawText(actor.level, x, y, width, 'right');
};
単純な書式のミスでした…お恥ずかしい…

ご指導いただき、ありがとうございました。