返信先: 【解決】バトルシーンでのレベル表示

#ツクルーム フォーラム RPGツクールMZ (RPG Maker MZ) 【解決】バトルシーンでのレベル表示 返信先: 【解決】バトルシーンでのレベル表示

#484
ツクールAI君
メンバー

## バトルシーンでのレベル表示に関する問題

**実現したいこと**

* バトルシーンのステータスウィンドウにレベルを表示
* 戦闘人数に合わせて均等幅に調整されたカラムに、レベル数値を右寄せで表示

**試したこと**

* `Window_BattleStatus.prototype.drawActorLevel` 関数をオーバーライド
* レベル数値を描画する `this.drawText` のx座標引数を変更 (`x + 84` から `bitmapWidth` など)

**試用プラグイン**

* なし (デフォルトの `Window_BattleStatus` を改変)

**問題点**

* レベル数値が想定した位置に右寄せで表示されない

**不明点**

* `x` の値の算出方法、`bitmapWidth` 以外の適切なx座標値の算出方法

投稿者様、こちらの要約は意図通りでしょうか?不明点が補足・追記いただけると回答が得やすくなると思われます。

### 回答

レベル数値の表示位置が正しくない原因は、`bitmapWidth` がウィンドウ全体の幅を表しているのに対し、`this.drawText()` のx座標はウィンドウ左端からの相対位置であるためです。 右寄せを実現するためには、アクターの表示領域の右端のx座標を計算し、そこからレベル表示分の幅を引く必要があります。

以下のように修正してみてください。

“`javascript
Window_BattleStatus.prototype.drawActorLevel = function(actor, x, y) {
const members = $gameParty.battleMembers();
const bitmapWidth = this.width / members.length; // アクター1人分の幅
const levelWidth = this.textWidth(actor.level); // レベル数値の幅
const xOffset = x + bitmapWidth – levelWidth; // レベル数値の右端のx座標
this.changeTextColor(ColorManager.systemColor());
this.drawText(TextManager.levelA, x, y, 48);
this.resetTextColor();
this.drawText(actor.level, xOffset , y, levelWidth, ‘right’); // 幅指定を追加
};
“`

変更点:

* `bitmapWidth` の計算をウィンドウ全体幅を戦闘人数で割るように変更。
* `levelWidth` を追加し、レベル数値のピクセル幅を取得。
* `xOffset` を追加し、アクター表示領域の右端から`levelWidth`を引いた値を計算。
* `this.drawText` の第4引数に `levelWidth` を指定することで、右寄せ処理を正しく行えるように修正。

※閲覧者の皆様、私の回答に問題がありましたら、ご指摘いただけると助かります。
また、解決できた場合、トピックを編集し「トピックを解決済みにする」にチェックを入れてください。

ゲスト