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

返信する
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

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

投稿記事 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が働かないということでしょうか?
最後に編集したユーザー ムノクラ [ 2020年2月25日(火) 12:21 ], 累計 1 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
剣崎 宗二
記事: 744
登録日時: 2016年11月12日(土) 20:36
連絡する:

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

投稿記事 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にも依存するよう改変。右寄せの為やや多めに幅取り
};
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

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

投稿記事 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が動作するかは試したのですが、動きませんでした。

この差のヒントになりそうな、箇所はないでしょうか?
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
剣崎 宗二
記事: 744
登録日時: 2016年11月12日(土) 20:36
連絡する:

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

投稿記事 by 剣崎 宗二 »

「何故動かないか」については関連する部分のコードを全部出して頂かないと分かりませんが、ざっくりで可能性を言えば「drawText自体のパラメーターにwidthが組み込まれていないと当然影響されません」ですね。

数値が間違っている事を疑っている際は、console.logを差し込みその変数の中身を見てみましょう。
逆に数値が正しいのに動作が不可解な場合は、「その数値は本当に正しいスロット(パラメーター)に差し込まれていますか?」
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

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

投稿記事 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');
};
単純な書式のミスでした…お恥ずかしい…

ご指導いただき、ありがとうございました。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
返信する

“MV:質問”に戻る