ページ 11

マップ名表示を真ん中寄せにするには?(解決済)

Posted: 2016年9月24日(土) 15:59
by U-D
ツクマテの皆様、失礼します。
マップ名表示が何故か以下のように左寄せになってしまいました。
無題.png
無題.png (112.49 KiB) 閲覧された回数 4096 回
プラグインは全てOFFにした状態です。
jsファイルを1行書き換えるだけでなんとかなると思うのですが、
どのファイルの何行目なのか検討がつかず……

初歩的な質問ですみませんが
マップ名の文字を黒帯の真ん中に表示するにはどこを書き換えればよいのか教えていただけないでしょうか?

Re: マップ名表示を真ん中寄せにするには?

Posted: 2016年9月24日(土) 16:20
by Trb
こんにちは。
マップ名の表示をしているのはrpg_windows.js 4704行目の

コード: 全て選択

Window_MapName.prototype.refresh = function() {
    this.contents.clear();
    if ($gameMap.displayName()) {
        var width = this.contentsWidth();
        this.drawBackground(0, 0, width, this.lineHeight());
        this.drawText($gameMap.displayName(), 0, 0, width, 'center');
    }
};
です。
this.drawTextのカッコ内の 'center' というのが、表示位置を真ん中と指定してる部分です。

ただ、ここが勝手に書き換わってしまうということはまず考えられないので、プラグインを全てOFFにしていても発生するとなると別の原因があるんじゃないかと思いますね・・・
たとえばですけど、マップ名が『王城         』←余計なスペースが入ってしまっている
になっていたりとかしませんか?

Re: マップ名表示を真ん中寄せにするには?

Posted: 2016年9月24日(土) 16:58
by U-D
Trb様、回答ありがとうございます。
自分の作品のrpg_windows.js の該当部分を見たところ、this.drawTextを this.drawTextExに書き換えていました。
どうやら私が以前、マップ名表示に制御文字を使おうとした際に書き換えていたようです。
(主人公の名前が入力式の作品のため、\n[1]の家→ハロルドの家 をやりたかった)
Exを外したところ真ん中寄せで描画されました!が……
無題.png
無題.png (17.32 KiB) 閲覧された回数 4075 回
やはり制御文字は使えなくなってしまいました……。
トピック名と異なる趣旨になってしまい申し訳ないのですが
「マップ名に制御文字を使える」状態で「真ん中寄せにする」ことは可能でしょうか……?

Re: マップ名表示を真ん中寄せにするには?

Posted: 2016年9月24日(土) 17:50
by Trb
なるほど、そういうことでしたか。

とりあえず簡単な方法として、使いたい制御文字が『\n[○]』だけなら、

コード: 全て選択

Window_MapName.prototype.refresh = function() {
    this.contents.clear();
    if ($gameMap.displayName()) {
        var width = this.contentsWidth();
        this.drawBackground(0, 0, width, this.lineHeight());
        var name = this.convertEscapeCharacters($gameMap.displayName());
        this.drawText(name, 0, 0, width, 'center');
    }
};
これで出来ると思います。
6行目の this.convertEscapeCharacters というのが制御文字を変換するメソッドなので、
それでマップ名を変換してから通常のdrawTextを使うということです。

this.convertEscapeCharacters で変換できるのは制御文字のうち『\n』『\v』『\p』『\g』だけなので、
色変えやアイコン表示などの制御文字も使いたい場合は別のやり方を考えないといけないですが・・・

Re: マップ名表示を真ん中寄せにするには?

Posted: 2016年9月24日(土) 18:33
by U-D
Trb様のコード通りに書き換えたところ、両方の条件を満たす動作が実現できました。
drawTextで使われている変数 name を事前にvarで置き換えておくという事ですね!
javaScriptについて勉強中なので解説してくださるのはとても助かります!

このトピックはこれで解決とさせていただきます。
Trb様、ありがとうございました!