[解決済]スクリプトから特定のイベントをコピー(スポーン)するには?

hadhad
記事: 20
登録日時: 2016年6月09日(木) 15:55

[解決済]スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by hadhad » 2016年7月25日(月) 15:23

いつもお世話になっております。

ゼルダなどのアクションRPGにおける、敵の無限増殖を実現したいと考えています。

演出手法として、敵が倒された時にそのイベントを新しい敵として”使い回して”スポーンっぽい動きをさせる方法が、
多くの歴代ツクール作品で行われていますが、
そういったことはせず、直でスクリプトからイベントを生成してマップに出現させたいと考えています。

Unityで例えるなら、Prefab化されたオブジェクト(イベント)をマップにInstantiateするような処理です。

このような事は可能なのでしょうか?

もし解決できる方がいらっしゃいましたら、
プラグインのソースや、既存のプラグイン等を教えて頂けないでしょうか。
ヒントだけでも結構です。

宜しくお願いします。
最後に編集したユーザー hadhad on 2016年8月16日(火) 17:15 [ 編集 1 回目 ]

アバター
Trb
記事: 151
登録日時: 2015年11月15日(日) 19:26
連絡を取る:

Re: スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by Trb » 2016年8月09日(火) 19:52

こちら、もう解決されたでしょうか?

完璧ではないのですが一応スクリプトで出来たので提示しておきます。
イベントコピ.png


手順としてはこれでいいと思うのですが、稀にエラーが出てしまうんですよね・・・
エラーに再現性が無くて、負荷が大きいためうまく機能しないことがあるのかなぁと思ってますが、もしエラーの出る原因を特定できれば改善できるかもしれないので色々試してみて頂けたらと思います。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by トリアコンタン » 2016年8月09日(火) 20:27

こんにちは。
ちょうど私も同じプラグインを作成していたので公開します。
仕組み的にはおおよそTrbさんのスクリプトをそのままプラグインにしたようなものです。

・使い方
イベントをコピーして動的に生成します。
コピーした一時イベントは、イベントコマンド「イベントの一時消去」
によって完全に削除することができます。
セルフスイッチは個別に管理され、生成されるたびに初期化されます。

プラグインコマンド詳細
イベントコマンド「プラグインコマンド」から実行。
(パラメータの間は半角スペースで区切る)

ERS_生成 1 5 10 # イベントID[1]のイベントをコピーしてX[5] Y[10]に配置
ERS_MAKE 1 5 10 # 同上

・ダウンロード
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/EventReSpawn.js

・利用規約
当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。

画像
画像
画像
画像
画像
画像

・これまでに制作したプラグイン一覧
https://docs.google.com/spreadsheets/d/1BnTyJr3Z1WoW4FMKtvKaICl4SQ5ehL5RxTDSV81oVQc/edit#gid=30581402
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
hadhad
記事: 20
登録日時: 2016年6月09日(木) 15:55

Re: スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by hadhad » 2016年8月12日(金) 02:00

Trbさん、トリアコンタンさん、ありがとうございます!
早速お二方のプラグインでやってみた所、問題を解決できました!

しかし、ひとつ疑問が残ります。

継続的に何百と複製し続けると、イベントの一時消去を行ってもイベントIDの最大数は継続的に増えていくようなのですが、
一時消去されつつもイベントIDが何百何千の値になっていても負荷的には問題ないのでしょうか?

また、もし可能なら、一時消去ではなくイベントの総数から抹消する方法がありましたら教えて頂けますと助かります。

ひとまず、ありがとうございました!
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by トリアコンタン » 2016年8月12日(金) 14:50

イベントIDの数字は増えていきますが、動的生成されたイベントに対して「イベントの一時消去」を実施すると
イベントオブジェクトとスプライトの参照も併せて消去する設計なのでGCとともに解放される想定です。

こちらの動画で生成→消去を5000体ぶん繰り返しています。
https://twitter.com/triacontane/status/763368795029123073
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
hadhad
記事: 20
登録日時: 2016年6月09日(木) 15:55

Re: スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by hadhad » 2016年8月12日(金) 17:11

ありがとうございます!
なるほど、それなら問題なさそうですね。

しかしこれって本当に総数に限界はないんでしょうかね?
限界がある場合、どこまでの数が保障されるのかが気になります。
javascriptの表現可能な最大値は±1.7976931348623157×10^308だそうですが、
そこまで生成しても問題ないのか、ちょっと気にかかります。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: スクリプトから特定のイベントをコピー(スポーン)するには?

投稿記事by トリアコンタン » 2016年8月12日(金) 18:22

そう言う意味での数値としての限界値はもちろんありますね。
ただ、Graphics.frameCountのように毎フレーム1加算される変数もありますので、
あまり気にはしてないです。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/

“MV:質問” へ戻る