ページ 510

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月04日(木) 18:31
by にゃたま
フトコロ様

こんばんは。お疲れ様でした。
色々テストしてみましたが全てうまく動作するようになりました。
フキダシプラグインも問題なく動作しております。これで実際の製作に入れます。
製作時に他に又問題が発生する可能性もありますがその時はその時でお尋ねすることにします。
その際はまたお世話になることもあるかもしれませんが、今回は本当にありがとうございました。
それでは用件のみですが失礼致します。

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月06日(土) 17:25
by ビービー
フトコロさん
おつかれさまです。

またわからないことがあったので質問させてください。
にゃたまさんが
拡張ウィンドウが表示中メニューボタンの開閉を繰り返すと
セリフが重なって表示されてしまうことがわかりました。
とおっしゃられていますが、
私の場合メニューを閉じるとフキダシウィンドウも消えてしまいます。

コード: 全て選択

◇スクリプト:$gameSystem.setMessagePopupEx(2, 3)
◇スクリプト:$gameMessageEx.window(2).prohibitClose()
◇スクリプト:$gameMessageEx.window(2).disp('\\EMP\\I[20]やぁやぁ\nそこのキミ\nちょっとこの僕と\n話さないかい?\\^')
移動ルートのスクリプトはこんな感じです。
にゃたまさんは問題ないようなので私のミスだと思うのですが、
やり方がわからないので、解決策を教えていただけると幸いです。
よろしくお願いします。

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月06日(土) 20:21
by フトコロ
ビービーさん
ビービー さんが書きました:フトコロさん
おつかれさまです。

またわからないことがあったので質問させてください。
にゃたまさんが
拡張ウィンドウが表示中メニューボタンの開閉を繰り返すと
セリフが重なって表示されてしまうことがわかりました。
とおっしゃられていますが、
私の場合メニューを閉じるとフキダシウィンドウも消えてしまいます。
まず、メニューを開くと表示していたウィンドウが閉じることは、正常な動作です。

この状態でメニューを開くと、再度ウィンドウが表示するように設定する機能を追加しました。
プラグインパラメータ<Scene Start Terminate>を無効にすることで
メニューを閉じたときに、表示していたウィンドウを再度開くようになります。

<ダウンロード>
https://raw.githubusercontent.com/futok ... Window2.js

<マニュアル>
https://github.com/futokoro/RPGMaker/bl ... dow2.ja.md

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月06日(土) 21:35
by ビービー
フトコロさん

使用だったのですね。
追加していただいたパラメータを無効にしたところ
理想の動作を確認しました。

迅速な対応ありがとうございました。

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月06日(土) 22:38
by にゃたま
フトコロ様

お世話になっております。プラグイン更新させていただきました。
このプラグインの完成度も高くなってきておりおかげさまで使いやすくなりました。
再度お礼申し上げます。

デバッグ中また一点気になることがありました、
キャラクターが雑談会話時にウィンドウが表示されないことがあることに気が付きました。
更新したプロジェクトをDLしてあることを前提にさせていただきます。
その発生条件ですが「Scene Start Terminate 0」で
村人1が移動ルートスクリプト「雑談1」disp表示により会話中、メニュー開閉を数回すると
次の村人2の「雑談2」が表示されないことがあります。
この原因を調査していただきたく思います。よろしくお願いします。

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月06日(土) 23:56
by フトコロ
にゃたまさん
にゃたま さんが書きました:キャラクターが雑談会話時にウィンドウが表示されないことがあることに気が付きました。
更新したプロジェクトをDLしてあることを前提にさせていただきます。
その発生条件ですが「Scene Start Terminate 0」で
村人1が移動ルートスクリプト「雑談1」disp表示により会話中、メニュー開閉を数回すると
次の村人2の「雑談2」が表示されないことがあります。
この原因を調査していただきたく思います。よろしくお願いします。
この状態は、以前のメッセージが次のイベントに重なる現象と同じものです。
具体的な処理の流れは以下の通りです。

1.村人2の移動ループスクリプトのdispを実行
⇒ウィンドウID1 に村人2の文章を登録
2.ウィンドウID1 を表示する前に、メニューを開く
⇒メニューが開いたことで、ウィンドウID1 の表示がキャンセル(村人2の文章を表示できず)
4.メニューを閉じる
5.村人2の移動ループスクリプトが終了して、村人1の移動ルートスクリプトを実行


以下の方法で対処できると思います。以下は村人1の1ページ目の移動ルートです。

コード: 全て選択

◇ジャンプ:+0, +0
◇スクリプト:$gameSystem.setMessagePopupEx(1,this._eventId);
◇スクリプト:$gameMessageEx.window(1).disp("\\EMP雑談1\\|\\|\\|\\^");
◇ウェイト:200フレーム
◇スクリプト:if (!$gameMessageEx.window(1).isBusy()) $gameSwitches.setValue(1, ture);
オプションで「動作を繰り返す」にチェックを入れます。

まず、スイッチはisBusy()スクリプトを使用して、登録された文章がクリアされた(表示したか)か判定し、
クリアされていれば、スイッチをONにするという処理に変えます。

そして、オプションの「動作を繰り返す」にチェックを入れたことで、文章を表示できない場合は何度も繰り返すようにします。

ウェイトを200に変えた理由は、メッセージの表示ウェイトが「\|」3つ分(=3秒=180フレーム)なので、少し余裕を持たせて200にしました。
こうしないと、メッセージの表示ウェイトが完了する前に、スイッチの判定に入ってしまうためです。

あとは、同様に他のページや別の村人についても修正を行います。

一応、この設定で何度か試したところうまく動きましたので、大丈夫かと思います。

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月07日(日) 14:02
by にゃたま
フトコロ様

結論からいいますと当方の環境ですとうまく動作しませんでした…。
フトコロ さんが書きました: 以下の方法で対処できると思います。以下は村人1の1ページ目の移動ルートです。

コード: 全て選択

◇ジャンプ:+0, +0
◇スクリプト:$gameSystem.setMessagePopupEx(1,this._eventId);
◇スクリプト:$gameMessageEx.window(1).disp("\\EMP雑談1\\|\\|\\|\\^");
◇ウェイト:200フレーム
◇スクリプト:if (!$gameMessageEx.window(1).isBusy()) $gameSwitches.setValue(1, ture);
オプションで「動作を繰り返す」にチェックを入れます。

まず、スイッチはisBusy()スクリプトを使用して、登録された文章がクリアされた(表示したか)か判定し、
クリアされていれば、スイッチをONにするという処理に変えます。

そして、オプションの「動作を繰り返す」にチェックを入れたことで、文章を表示できない場合は何度も繰り返すようにします。

ウェイトを200に変えた理由は、メッセージの表示ウェイトが「\|」3つ分(=3秒=180フレーム)なので、少し余裕を持たせて200にしました。
こうしないと、メッセージの表示ウェイトが完了する前に、スイッチの判定に入ってしまうためです。
上記の方法で試してみましたがやはり村人1の雑談1を表示中メニュー開閉を3度繰り返すと、雑談1が表示中スイッチが切り替わり村人2の2ページ目のスクリプトが実行されるようです。(以下のように確認しました)

スイッチが切り替わる瞬間にconsole.logを表示するよう以下のように試してみました。
if (!$gameMessageEx.window(1).isBusy()) {console.log("村人1会話終了");$gameSwitches.setValue(1, true);}
すると「雑談1」フキダシが消えるより早く「村人1会話終了」が表示されました。

フキダシ表示した瞬間次のスクリプト(ウェイト200)が実行されるようです。
メニューの開閉によりフキダシの表示が延長されウェイト200が経過してしまうのですね。

それならそうともういっそのこと「ウェイト200」とか入れずに
「雑談1\\|\\|\\|\\^\\[$gameSwitches.setValue(1, true);]」といった感じに
メッセージ中に入れてしまえないかって思いました。いかがでしょうか?

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月07日(日) 14:36
by フトコロ
にゃたま さんが書きました:それならそうともういっそのこと「ウェイト200」とか入れずに
「雑談1\\|\\|\\|\\^\\[$gameSwitches.setValue(1, true);]」といった感じに
メッセージ中に入れてしまえないかって思いました。いかがでしょうか?
確かに、それが一番確実かもしれませんね。

このプラグインを使用すると、制御文字でスクリプトを処理できるようです。
https://raw.githubusercontent.com/AlecY ... andBook.js

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月07日(日) 16:02
by にゃたま
フトコロ様

プラグインをお勧めいただきありがとうございます。
$gameMessageEx.window(1).disp("\\EMP雑談1\\|\\|\\|\\^\\Js[$gameSwitches.setValue(1, true);]\\Js
このようにして実行させてみたら「雑談1」表示後3秒待たずして直ぐにスクリプトが実行されてしまいました。
そしてJSが評価された値0までメッセージの後に表示してしまうようです。

現状標準の制御文字「\\|」等を有効にしたJSを実行するプラグインは無いのでしょうか。
それかJSを実行するプラグインでなくともスイッチを切り替える制御文字でもいいです。

それらの方法が使えない場合ウェイトを入れるとして
村人2のメッセージを強制的に出力するといったことは難しいでしょうか?

Re: 【解決済み】イベントが会話中でもプレイヤーが動けるプラグイン

Posted: 2017年5月07日(日) 18:42
by フトコロ
にゃたま さんが書きました:フトコロ様

プラグインをお勧めいただきありがとうございます。
$gameMessageEx.window(1).disp("\\EMP雑談1\\|\\|\\|\\^\\Js[$gameSwitches.setValue(1, true);]\\Js
このようにして実行させてみたら「雑談1」表示後3秒待たずして直ぐにスクリプトが実行されてしまいました。
そしてJSが評価された値0までメッセージの後に表示してしまうようです。
うまくいきませんでしたか。。。
にゃたま さんが書きました: 現状標準の制御文字「\\|」等を有効にしたJSを実行するプラグインは無いのでしょうか。
それかJSを実行するプラグインでなくともスイッチを切り替える制御文字でもいいです。
すみません。他はしらないです。
にゃたま さんが書きました: それらの方法が使えない場合ウェイトを入れるとして
村人2のメッセージを強制的に出力するといったことは難しいでしょうか?
メッセージの強制出力は難しいですね。

ちょっと方向を変えて下のようなイベントを作成してみました。
会話イベント.jpg
見て分かると思いますが、村人1と村人2のフキダシ会話を制御するイベントです。

最初の分岐のスクリプトは以下のとおりです。
!$gameMessageEx.window(1).isBusyBase() && !$gameMessageEx.window(0).isBusyBase()

中身を説明すると、最初の分岐で、isBusyBase()というスクリプトを使用しています。
これはisBusyよりもさらに条件が厳しい判定です。
これを以前の通りの移動ルートの中で使用すると、最悪何度も同じ会話が表示する可能性があります。
フキダシを表示する処理の実行判定に使用することで、会話の重複を防ぎます。

村人1と村人2には移動ルートをなくして、会話イベントのみ残しました。

これだとうまく交互に会話が進んだようなので、試してみてもらえませんか?

>最初の分岐に条件が不足していたので修正