ページ 1 / 1
【解決済み】プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2016年12月31日(土) 20:29
by ZOO
年末に時間ができたので再挑戦も、失敗続きなので質問させていただきます。
マップ全体にいるNPCに提案をし、OKやNGなど反応が返ってくるプラグインを作っているのですが
メッセージ周りが上手くいきません。
具体的には下記のようになります。

NPCが提案にOKをした場合のメッセージウィンドウ(NGの処理はコメントアウト)

NPCが提案にNGをした場合のメッセージウィンドウ(OKの処理はコメントアウト)

両方を行った場合、メッセージが分割されず、顔グラフィックが最後のものになる。
以下ソース抜粋
if(OK) {
$gameMessage.setFaceImage($dataActors[actor_number].name, 0);
//$gameMessage.setFaceImage("facesファイル内にあるファイル名", 番号)
$gameMessage.setBackground(1);
$gameMessage.setPositionType(1);
$gameMessage.add(text[1]);
} else {
$gameMessage.setFaceImage($dataActors[actor_number].name, 0);
$gameMessage.setBackground(1);
$gameMessage.setPositionType(1);
$gameMessage.add(text[2]);
}
$gameMessageに改行というか、次のメッセージを新規ウィンドウで記述する、といった機能は無いのでしょうか?
5行で改ページになるらしいので\nを使う方法もあるようですが・・・。
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2016年12月31日(土) 20:57
by トリアコンタン
改ページの場合は「\f」を挿入します。
コード: 全て選択
$gameMessage.add('aaaaa\f');
$gameMessage.add('bbbbb');
・実行結果
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2016年12月31日(土) 21:30
by ZOO
トリアコンタン様。
返信ありがとうございます。
ご指摘の \f で改ページ(改ウィンドウ?)はできました!
しかし、もう一つの問題点、setFaceImage()は解決しませんでした。(当たり前かもしれませんが)
setFaceImage()される時期とメッセージが吐き出される時期に差があって、FaceImageが上書きされていると考えているのですが、同じようなことをやっている、参考になるプラグインなどご存じないでしょうか?
前回はGame_Interpreter.prototype.command101を見るように他の方からアドバイスを頂いたので、オーバーロードしてみたのですが、上手く動きませんでした・・・。
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2017年1月01日(日) 00:32
by トリアコンタン
1フレームで(for文などを使って)すべてのNPCのセリフを(顔グラフィックなども含めて)登録するのは無理です。
セリフをひとつ$gameMessageに登録したら一旦処理を終了する必要があります。
そしてメッセージ表示中かどうかを監視して、メッセージが閉じられたら、即座に次のセリフを$gameMessageに登録します。
この処理を実行しているのがGame_Interpreter.prototype.command101です。
実際に制作されているプラグインをご提示頂ければ、もう少し踏み込んだ助言ができるかと思います。
よろしければご検討ください。
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2017年1月01日(日) 00:45
by ZOO
トリアコンタン様。
返信ありがとうございます。並びに、あけましておめでとうございます。
>1フレームで(for文などを使って)すべてのNPCのセリフを(顔グラフィックなども含めて)登録するのは無理です。
>セリフをひとつ$gameMessageに登録したら一旦処理を終了する必要があります。
>
>そしてメッセージ表示中かどうかを監視して、メッセージが閉じられたら、即座に次のセリフを$gameMessageに登録します。
>
>この処理を実行しているのがGame_Interpreter.prototype.command101です。
一度、これらを鑑みて構造を変えてみようと思います。
>セリフをひとつ$gameMessageに登録したら一旦処理を終了する必要があります。
特にこの部分が大変かもしれません。
ある程度形ができましたらプラグインをアップロードしますので、その際、ご都合が宜しければアドバイスいただけると幸いです。
ようやく先が見えてきた気がします。
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2017年1月01日(日) 10:55
by トリアコンタン
あけましておめでとうございます!
うまくいくことを願っています。
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2017年1月10日(火) 07:35
by ZOO
試行錯誤の末、「遊びに行こうという」提案コマンドをプラグインに実装し、その中でRPGMVの変数に「アクター名」と「メッセージ」を格納し、イベント側でfor文を回してみたのですが・・・。
(アクター名はアクターの顔グラの取得に使用。メッセージは提案の受諾、もしくは拒否するものが格納されている。)
以下イベントの画像
http://gazo.shitao.info/r/i/20170110073528_000.png
結局プラグインの外でfor文を回しても結果変わらず、wait(60)を利用することで、1秒待ち、結果として2パターンの結果が得られました。
1・一人目のメッセージウィンドウを素早く閉じると、アクターAのメッセージ、アクターBのメッセージと顔グラも正しく表示される。
2・一人目のメッセージウィンドウを時間をおいて閉じると、二人目のアクターのメッセージがスキップされる。
command101がbusy(メッセージを表示しているからbusy?)の間に、二人目のアクターのメッセージがaddされ、なんらかの理由でスキップされているのだと思うのですが・・・。
wait(60)の代わりに空の文章を入れると問題なく機能します。
この場合command101をどう実装するのが正しいのでしょうか?
ソースをアップロードしますので、見苦しいですが、助言を頂けないでしょうか?
http://www.dotup.org/uploda/www.dotup.o ... 6.zip.html
ソースのダウンロードパスは4444です。
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2017年1月10日(火) 22:05
by トリアコンタン
お疲れさまです。
プラグインの内容を拝見しました。
ウェイト60の代わりに、以下を設定してみたらどうでしょうか?
コード: 全て選択
this.setWaitMode('message');
Re: プラグイン内で$gameMessageを2回使うと個別に表示されない
Posted: 2017年1月11日(水) 12:39
by ZOO
トリアコンタン様
プラグインを閲覧していただき、ありがとうございます。
ご指摘の通り
ウェイト60からthis.setWaitMode('message');
に修正したところ、イメージ通りの動作をするようになりました!
これで他のコマンドにも取り掛かれそうです。
重ねてお礼申し上げます。