ページ 11

一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年9月30日(水) 10:13
by やまもと
一つのイベントに複数の並列処理イベントを同時実行させたい時、皆さんはどうしていますでしょうか。

コモンイベントを利用するという方法もありますが、並列処理させたいイベントが複数ある場合、どうしても弊害が発生してしまいます。(コモンイベント並列処理起動のスイッチをONOFFすると、他のイベントにも反映されてしまう、など)

やりたい事は、

①変数を取得してその内容によって処理を発生させる
②上記の並列処理の最中に別の処理を同時進行させる

わかりづらくて申し訳ありません。
単に私の技量の問題かもしれませんが、こういう風にしてみてはなどのアドバイスがありましたら
ご教授頂けますと幸いです。

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月01日(木) 23:02
by 論理イヌ
あまり詳しくないので、的外れなアドバイスでしたら申し訳ありません。
具体的な内容がわからないので、勘で書きます。

1.処理①と処理②をそれぞれコモンイベントで書いて、
 並列処理を実行しているマップイベントで、
 それぞれのコモンイベントを呼ぶだけにする。

2.いっそのこと、処理①と処理②を同じイベントの中に書く

3.処理①の結果により処理②を非同期で実行したいという場合は、
 処理①のあと、処理②の条件分岐をがんばって書く。

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月02日(金) 00:26
by sally
思いつくパターンが多すぎて、ジャストアイデアが出てこないのですが、
汎用的に行うならば

■ コモンイベントを作動させるスイッチをコモンイベントか変数で管理する
 下記のようなコモンイベントを組み、イベント時に変数操作とコモンイベント呼び出しで
 一括管理するのはどうでしょうか。
----------
◆条件分岐:並列管理 = 0
◆注釈:全コモンリセット用
◆スイッチの操作:#0006..0008 = OFF
:分岐終了
◆条件分岐:並列管理 = 1
◆スイッチの操作:#0006 コモンA = ON
◆スイッチの操作:#0007 コモンB = ON

:分岐終了
◆条件分岐:並列管理 = 2
◆スイッチの操作:#0007 コモンB = ON
◆スイッチの操作:#0008 コモンC = ON

:分岐終了
◆条件分岐:並列管理 = 3
◆スイッチの操作:#0006 コモンA = ON
◆スイッチの操作:#0008 コモンC = ON

:分岐終了
----------
該当するコモンイベントを中断するために、上記スイッチをOFFに切り替えた
コモン終了用という呼び出し専用コモンを組めば、変数一つで管理はできます。

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月02日(金) 10:20
by やまもと
論理イヌ さんが書きました:あまり詳しくないので、的外れなアドバイスでしたら申し訳ありません。
具体的な内容がわからないので、勘で書きます。

1.処理①と処理②をそれぞれコモンイベントで書いて、
 並列処理を実行しているマップイベントで、
 それぞれのコモンイベントを呼ぶだけにする。

2.いっそのこと、処理①と処理②を同じイベントの中に書く

3.処理①の結果により処理②を非同期で実行したいという場合は、
 処理①のあと、処理②の条件分岐をがんばって書く。
返信ありがとうございます!

1の方法ですが、処理①は常に変数を取得し続け、処理①の結果によって処理②を実行したいのですが、
処理②を実行している間にも処理①の内容を実行させたいというのが今直面している問題です。
コモンイベントに実行内容を移しても処理の仕方は変わらず、その上この振る舞いをするイベントを複数設置することを考えているので、解決策には至りませんでした。

2、3については処理②にウェイトを設ける都合上、同時並行させるということが難しいです。

せっかく返信頂いたのにすみません…

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月02日(金) 10:54
by やまもと
sally さんが書きました:思いつくパターンが多すぎて、ジャストアイデアが出てこないのですが、
汎用的に行うならば

■ コモンイベントを作動させるスイッチをコモンイベントか変数で管理する
 下記のようなコモンイベントを組み、イベント時に変数操作とコモンイベント呼び出しで
 一括管理するのはどうでしょうか。
----------
◆条件分岐:並列管理 = 0
◆注釈:全コモンリセット用
◆スイッチの操作:#0006..0008 = OFF
:分岐終了
◆条件分岐:並列管理 = 1
◆スイッチの操作:#0006 コモンA = ON
◆スイッチの操作:#0007 コモンB = ON

:分岐終了
◆条件分岐:並列管理 = 2
◆スイッチの操作:#0007 コモンB = ON
◆スイッチの操作:#0008 コモンC = ON

:分岐終了
◆条件分岐:並列管理 = 3
◆スイッチの操作:#0006 コモンA = ON
◆スイッチの操作:#0008 コモンC = ON

:分岐終了
----------
該当するコモンイベントを中断するために、上記スイッチをOFFに切り替えた
コモン終了用という呼び出し専用コモンを組めば、変数一つで管理はできます。
返信ありがとうございます!
わかりづらくて申し訳ありません。並列処理のコモンイベントを同時に実行させるのではなく、
イベントが複数ある都合上、どうしてもイベントごとに並列処理を実行させたいというのが理想です。

わざわざ返信頂いたのに申し訳ありません…

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月02日(金) 13:19
by sally
ご質問に対して見当違いの理解をしていました。申し訳ありません。

まず一つのイベントで並列処理を同時に行うことはできず、
順番を設けるか、片方の処理を別イベントに担ってもらう必要があります。
(IDnのイベントページmの内容を外部から実行するプラグイン等は見つかりませんでした)。
処理①は常に変数を取得し続け、処理①の結果によって処理②を実行したいのですが、
処理②を実行している間にも処理①の内容を実行させたい
についてですが、処理①は変数を取得するだけのイベントなのでしょうか。

例えば取得する元の変数が時間などであれば
時間経過はコモンイベントに任せ、処理②開始時に「処理②経過時間」に取得元変数を代入、
処理②終了時に「処理②経過時間」から取得元変数を減算すればマイナス数値の経過時間出ますので、
これを処理①用変数に減算すれば、処理②で経過した時間を取得できます。

…と、このような感じですが、処理させたい内容で対応内容が変わりますので、
もう少し具体的にご教示いただけると、可否を含めた解決案をご提案できるかと思います。

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月04日(日) 23:39
by やまもと
返信ありがとうございます!お返事遅れてすみません…

処理①でやっている内容としては、並列処理でそのイベントの座標位置やプレイヤーの座標位置を取得し続け、その結果によって条件分岐によりコモンイベントを発生させる、いわゆるプレイヤーとそのイベントとの当たり判定のような役割を担っています。

イベントとプレイヤーが一定の距離内まで近づく(処理①)と、イベントにアクションをさせる(処理②)という内容です。

この処理②の内容がウェイトを使っていたり、そのイベントのIDを変数に代入して利用したりしているので、
イベントに直接内容を記載するとウェイトの間処理①をやってくれなかったり、この振る舞いをするイベントが複数ある場合に他のイベントに支障が出るなどといった事が起こりうまくいかない状態です。

具体的にご説明できているか不安ですが、参考までに…
お時間を割いて頂き本当にありがとうございます。よろしければご助言頂けたら幸いです。

Re: 一つのイベントに複数の並列処理イベントを同時実行させたい

Posted: 2020年10月05日(月) 19:11
by sally
詳細のご説明ありがとうございます。
処理①が当たり判定、当たった時の条件により処理②-1、処理②-2…を実行するのですね。

その場合でしたら処理①は処理②実行の判定処理のようですので、
処理①を常に実行しておく必要はないかと思いますが…。
仮にずっと処理させたいとなると、処理①と②は別イベントで分ける必要があります。

おそらくですが、
viewtopic.php?t=3656
の記事のフトコロ さんのご回答が当てはまるかと思います。

もしくはマンカインド さんのプレイヤー探索プラグイン
http://mankind-games.blogspot.com/2016/ ... ost_8.html
を使われると良いのではないでしょうか。
こちらはイベントを中心とて設定した範囲に触れた際に特定のスイッチがオンになるというプラグインですので、
実質的に処理①と同じ役割をしてくれるかと思います。

また、
この振る舞いをするイベントが複数ある場合に他のイベントに支障が出る
こちらについては参照IDが異なるイベントを一つのコモンイベントで行っていることが理由な気がします。
タイミングによって何故かイベント2の動作をイベント1がやってるとかでしたら
処理が混線していると思うので、同じコモンイベントを複数イベントで重複動作する場合は、
変数やスイッチなどの「変動する処理」は使わない方が無難です。