【解決済み】プラグイン内で$gameMessageを2回使うと個別に表示されない

返信する
ZOO
記事: 24
登録日時: 2016年7月30日(土) 08:55

【解決済み】プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 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を使う方法もあるようですが・・・。
最後に編集したユーザー ZOO [ 2017年1月11日(水) 12:53 ], 累計 1 回
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by トリアコンタン »

改ページの場合は「\f」を挿入します。

コード: 全て選択

$gameMessage.add('aaaaa\f');
$gameMessage.add('bbbbb');
・実行結果
image_20161231_205718.jpg
image_20161231_205719.jpg
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ZOO
記事: 24
登録日時: 2016年7月30日(土) 08:55

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by ZOO »

トリアコンタン様。

返信ありがとうございます。
ご指摘の \f で改ページ(改ウィンドウ?)はできました!

しかし、もう一つの問題点、setFaceImage()は解決しませんでした。(当たり前かもしれませんが)
setFaceImage()される時期とメッセージが吐き出される時期に差があって、FaceImageが上書きされていると考えているのですが、同じようなことをやっている、参考になるプラグインなどご存じないでしょうか?

前回はGame_Interpreter.prototype.command101を見るように他の方からアドバイスを頂いたので、オーバーロードしてみたのですが、上手く動きませんでした・・・。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by トリアコンタン »

1フレームで(for文などを使って)すべてのNPCのセリフを(顔グラフィックなども含めて)登録するのは無理です。
セリフをひとつ$gameMessageに登録したら一旦処理を終了する必要があります。

そしてメッセージ表示中かどうかを監視して、メッセージが閉じられたら、即座に次のセリフを$gameMessageに登録します。

この処理を実行しているのがGame_Interpreter.prototype.command101です。

実際に制作されているプラグインをご提示頂ければ、もう少し踏み込んだ助言ができるかと思います。
よろしければご検討ください。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ZOO
記事: 24
登録日時: 2016年7月30日(土) 08:55

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by ZOO »

トリアコンタン様。

返信ありがとうございます。並びに、あけましておめでとうございます。

>1フレームで(for文などを使って)すべてのNPCのセリフを(顔グラフィックなども含めて)登録するのは無理です。
>セリフをひとつ$gameMessageに登録したら一旦処理を終了する必要があります。
>
>そしてメッセージ表示中かどうかを監視して、メッセージが閉じられたら、即座に次のセリフを$gameMessageに登録します。
>
>この処理を実行しているのがGame_Interpreter.prototype.command101です。

一度、これらを鑑みて構造を変えてみようと思います。
>セリフをひとつ$gameMessageに登録したら一旦処理を終了する必要があります。
特にこの部分が大変かもしれません。

ある程度形ができましたらプラグインをアップロードしますので、その際、ご都合が宜しければアドバイスいただけると幸いです。

ようやく先が見えてきた気がします。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by トリアコンタン »

あけましておめでとうございます!
うまくいくことを願っています。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ZOO
記事: 24
登録日時: 2016年7月30日(土) 08:55

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 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です。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by トリアコンタン »

お疲れさまです。
プラグインの内容を拝見しました。
ウェイト60の代わりに、以下を設定してみたらどうでしょうか?

コード: 全て選択

this.setWaitMode('message');
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ZOO
記事: 24
登録日時: 2016年7月30日(土) 08:55

Re: プラグイン内で$gameMessageを2回使うと個別に表示されない

投稿記事 by ZOO »

トリアコンタン様

プラグインを閲覧していただき、ありがとうございます。
ご指摘の通り
ウェイト60からthis.setWaitMode('message');
に修正したところ、イメージ通りの動作をするようになりました!

これで他のコマンドにも取り掛かれそうです。
重ねてお礼申し上げます。
返信する

“MV:質問”に戻る