YEP_MessageCore.jsのnameBoxについて、
スクリプトの$gameMessage.add()で2つ以上のテキストを渡すと、後から渡したnameBoxの情報で前のテキストが上書きされてしまいます。
例えば次のようにテキストa,bを$gameMessage.add()した時、テキストaの時点でbのnameBoxが表示されてしまいます。
今回はプラグイン側からnameBoxが上書きされないように文章を表示させる方法を探しています。
どうかお知恵をお貸しください。
なぜnameBoxが上書きされてしまうかについて、
$gameMessage.add()でテキストをWindow_Messageに渡した場合、
Window_Message.prototype.convertEscapeCharacters
(Window_Message.prototype.convertNameBox)
に全てのテキストを一度に渡してしまうためと思われます。
スクリプトコマンド側でnameBox付き文章を表示させる場合は、this.setWaitMode('message')を加えた上で、
とコマンドを切って書くことでテキストaとテキストbが分割して渡されるため、正常に表示することができます。
ですが今回はメッセージ表示をプラグイン側で行っているため、エディタを使わずなんとかしたいです。
エディタを介さないのであれば、プラグイン側に記述するでも、YEP_MessageCore.jsを改造するでも、Window_Messageを書き換えるでも。方法は問いません。
OS:Windows10
MV本体:1.6.2
YEP_MessageCore.js:1.19
【解決済み】YEP_MessageCore.jsでnameBoxテキストが上書きされてしまう
【解決済み】YEP_MessageCore.jsでnameBoxテキストが上書きされてしまう
最後に編集したユーザー utako [ 2019年5月11日(土) 14:15 ], 累計 1 回
--------------------------------------------------------------------------
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!
Re: YEP_MessageCore.jsでnameBoxテキストが上書きされてしまう
お疲れ様です。
ざっくりとした考え方にはなりますが、別の制御文字を入れ、startMessageでconvertEscapeCharacterが行われる前にその制御文字でallMessageを切り分けて別のフィールドに入れておき、_textStateに(onEndOfText等で)1部分ずつ押し込むのがよろしいのではないかと考えます。
ざっくりとした考え方にはなりますが、別の制御文字を入れ、startMessageでconvertEscapeCharacterが行われる前にその制御文字でallMessageを切り分けて別のフィールドに入れておき、_textStateに(onEndOfText等で)1部分ずつ押し込むのがよろしいのではないかと考えます。
最後に編集したユーザー 剣崎 宗二 [ 2019年5月10日(金) 15:31 ], 累計 1 回
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
Re: YEP_MessageCore.jsでnameBoxテキストが上書きされてしまう
きちんと対応するならconverEscapeCharactersではなくprocessEscapeCharacterで処理されるように改修するのが良いでしょうね。
制御文字の方式が標準とは異なるのでobtainEscapeCodeやobtainEscapeParamのカスタムも必要になります。
ご自身で改修されるなら「¥C[n]」の実装が参考になると思いますのでそちらをご覧ください。
制御文字の方式が標準とは異なるのでobtainEscapeCodeやobtainEscapeParamのカスタムも必要になります。
ご自身で改修されるなら「¥C[n]」の実装が参考になると思いますのでそちらをご覧ください。
Re: YEP_MessageCore.jsでnameBoxテキストが上書きされてしまう
お二方共、ありがとうございます!
文字列側の処理にフックして分割させるというやり方ですね。
制御文字を利用するという方法は思いつかなかったので、いただいた情報を元にちょっと試行錯誤してみます。
文字列側の処理にフックして分割させるというやり方ですね。
制御文字を利用するという方法は思いつかなかったので、いただいた情報を元にちょっと試行錯誤してみます。
最後に編集したユーザー utako [ 2019年5月11日(土) 15:02 ], 累計 1 回
Re: YEP_MessageCore.jsでnameBoxテキストが上書きされてしまう
おかげさまで、プラグイン側から正常にnameBoxを表示させることができるようになりました。
お二方ともアプローチの仕方が違って、大変勉強になりました。
ありがとうございました!
コード: 全て選択
// YEP_MessageCore.jsの
// Window_Message.prototype.convertEscapeCharactersの
// text = this.convertNameBox(text);
// をコメントアウト
const _Window_Message_processEscapeCharacter = Window_Message.prototype.processEscapeCharacter
Window_Message.prototype.processEscapeCharacter = function(code, textState) {
switch (code) {
case 'N':
this.convertEscapeNameBox(textState)
break;
case 'NC':
this.convertEscapeNameBox(textState, 3)
break;
case 'NR':
this.convertEscapeNameBox(textState, 5)
break;
default:
_Window_Message_processEscapeCharacter.apply(this, arguments)
break;
}
}
Window_Message.prototype.convertEscapeNameBox = function(textState, num) {
let text = /\<(.*?)\>/.exec( textState.text.slice(textState.index) )[0]
if (text) {
textState.index += text.length;
text = text.replace(/\<(.*?)\>/gi, function() {
return Yanfly.nameWindow.refresh(arguments[1], num);
}, this);
}
};
ありがとうございました!
--------------------------------------------------------------------------
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!