【解決済】トリアコンタン様のカスタムメニュー drawTextを使いこなしたい

けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

【解決済】トリアコンタン様のカスタムメニュー drawTextを使いこなしたい

投稿記事by けいのすけ » 2023年2月11日(土) 11:53

また疑問が解決できないので質問させて下さい。
例によってトリアコンタン様のカスタムメニュープラグインです。
https://plugin.fungamemake.com/archives/23762

パーティのリストのウインドウ内に変数を利用して説明テキストを表示させたいと考えています。
「一覧取得スクリプト」で$gameParty.members(); // パーティメンバー
「項目描写スクリプト」でthis.drawActorName(item, r.x, r.y); // アクター名称
これでパーティのリストが表示されますがこのメンバーの名前の右側に説明文として

this.drawText(`パーティ1番目`, r.x+120, r.y, r.width); // 任意のテキスト描画(制御文字変換あり)
this.drawTextEx(`パーティ2番目 \\v[1]`, r.x+120, r.y+40, r.width); // 任意のテキスト描画(制御文字変換あり)

といった感じのテキストを入れようとするとテキストがパーティ人数分重なって描写されます(イメージ画像添付)。
それぞれのテキストを1つづつ表示させる方法が分かる方居られましたら教えて下さい。

ちなみに「一覧取得スクリプト」をnull; // なし(単項目表示ウィンドウ用)にすればテキストは重複描写されないのですが今度はアクターの名前をthis.drawTextExで描写した時に幅の調整が自動で出来ないので困ってます…。
添付ファイル
重なり.png
重なり.png (80.34 KiB) 閲覧数: 505 回
最後に編集したユーザー けいのすけ on 2023年2月12日(日) 11:04 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 477
登録日時: 2018年12月23日(日) 13:55

Re: トリアコンタン様のカスタムメニュー drawTextを使いこなしたい

投稿記事by ecf5DTTzl6h6lJj02 » 2023年2月11日(土) 17:07

こんにちは。
けいのすけ さんが書きました:また疑問が解決できないので質問させて下さい。
例によってトリアコンタン様のカスタムメニュープラグインです。
https://plugin.fungamemake.com/archives/23762

パーティのリストのウインドウ内に変数を利用して説明テキストを表示させたいと考えています。
「一覧取得スクリプト」で$gameParty.members(); // パーティメンバー
「項目描写スクリプト」でthis.drawActorName(item, r.x, r.y); // アクター名称
これでパーティのリストが表示されますがこのメンバーの名前の右側に説明文として

this.drawText(`パーティ1番目`, r.x+120, r.y, r.width); // 任意のテキスト描画(制御文字変換あり)
this.drawTextEx(`パーティ2番目 \\v[1]`, r.x+120, r.y+40, r.width); // 任意のテキスト描画(制御文字変換あり)

といった感じのテキストを入れようとするとテキストがパーティ人数分重なって描写されます(イメージ画像添付)。
それぞれのテキストを1つづつ表示させる方法が分かる方居られましたら教えて下さい。

ちなみに「一覧取得スクリプト」をnull; // なし(単項目表示ウィンドウ用)にすればテキストは重複描写されないのですが今度はアクターの名前をthis.drawTextExで描写した時に幅の調整が自動で出来ないので困ってます…。


項目描画スクリプトの内容は、一覧取得スクリプトで取得した各項目に対して、実行されますので、

項目描画スクリプトの設定.jpg
項目描画スクリプトの設定.jpg (59.49 KiB) 閲覧数: 480 回


のような設定をすると、添付画像で示されているような表示になってしまいます。
(ハロルド、テレーゼ、 マーシャ、ルキウス、 の項目で1回ずつ描画項目スクリプトの内容を描画するので)

アクター名の後に、パーティ n 番目 という表示を追加するだけであれば、
項目描画スクリプトに

コード: 全て選択

this.drawText(`${item.name()}\t\tパーティ ${item.index() + 1} 番目`, r.x, r.y, r.width, 'left'); // 任意のテキスト描画(制御文字変換なし。左揃え)

の一つだけを設定すれば幅の調整込みで描画できるはずです。
(テンプレートリテラル はお渡ししたサンプルプロジェクトの解説で書いているのでそちらをチェックしてください)

あと、drawTextEx でゲーム内変数 1 番の項目を表示しようとしていますが、
私のサンプルを改造して作っている場合、ゲーム変数1番には選択した(選択中の)項目のオブジェクトが入っています。
オブジェクトは [object Object] という表示になってしまい、正常に表示されませんのでご注意ください。

drawTextEx の挙動に関しては、ツクールMVのコアスクリプト側の挙動なので、
これをどうにかするには、プラグインで、drawTextEx の内容を再定義しないといけませんが、
これは、ものすごく面倒なので、遠慮したいです。

変数 n 番の値を表示する \V[n]、
アクター n 番の名前を表示する \N[n]、
パーティ n 番目のアクターの名前を表示する \P[n]、
通貨単位を表示する \G 、
の 4つの 制御文字であれば、
convertEscapeCharacters メソッドを使用して、制御文字を変換した文字列を drawText で描画することで、
描画領域内に収まるように縮小させることもできますが、
描画色変更の \C[n] や、 アイコン描画の\I[n] など、
convertEscapeCharacters で変換できない制御文字が使われている文字列に関しては対応できません。
何文字まで描画できるのか計算して文字列を作ってもらうしかないと思います。

convertEscapeCharacters メソッドは、項目描画スクリプト内であれば、

コード: 全て選択

this.convertEscapeCharacters(文字列)

で動作します。
けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

Re: トリアコンタン様のカスタムメニュー drawTextを使いこなしたい

投稿記事by けいのすけ » 2023年2月12日(日) 11:03

ecf5DTTzl6h6lJj02さまいつもありがとうございます。

変数1は例で記入しただけで実際には不連続の変数Xからテキストを引っ張ってくるので大丈夫です。
表題に関しては「一覧取得スクリプト」をnull; // なしにしてメンバーの名前の方を教えて頂いた「this.convertEscapeCharacters(文字列)」の方を利用して

this.drawText(this.convertEscapeCharacters(`\\p[1]`), r.x, r.y, r.width=130);
this.drawTextEx('\\v[10]', r.x+140, r.y, r.width, 'right');
this.drawText(this.convertEscapeCharacters(`\\p[2]`), r.x, r.y+40, r.width=130);
this.drawTextEx('\\v[35]', r.x+140, r.y+40, r.width, 'right');

という書き方で表示幅を収めて変数をTextExで1つづつ表示させる事で目的が果たせました!
ありがとうございました!

“MV:質問” へ戻る