【解決済】アクターのステートをエネミーに反映(処理速度の向上)

返信する
syouji
記事: 29
登録日時: 2017年6月22日(木) 00:35

【解決済】アクターのステートをエネミーに反映(処理速度の向上)

投稿記事 by syouji »

お世話になります。

戦闘でアクターVSアクターの処理を作成するため
戦闘前にアクターのステートをエネミーに反映させる以下のスクリプトを実装しました。

繰り返し処理(エネミーの数だけ実行){
 繰り返し処理(Loopインデックス 0 ~ 1000){
  if($gameActors.actor(アクターのNO).isStateAffected(Loopインデックス)){
   $gameVariables.setValue(一時変数,$gameActors.actor(アクターのNO)._stateTurns[$gameVariables.value(Loopインデックス)]);
   $gameTroop.members()[敵のNO].addState(Loopインデックス);
   $gameTroop.members()[敵のNO]._stateTurns[Loopインデックス] = 一時変数;
  }
 }
}

しかし、処理が非常に遅く、戦闘が始まるまでに5~6秒かかってしまいます。
ステートのデータが多い(最大数1000を使用)、またエネミーが複数出現するのが原因ですが
なるべくステート数、エネミーの数を減らさずに対応したいと考えています。

アクターのステートをエネミーに一括でコピーする様な
短い時間でアクターのステートをエネミーに反映させる処理は存在しないでしょうか。

ご存知でしたら、教えていただきたいです。

よろしくお願いいたします。
最後に編集したユーザー syouji [ 2019年11月28日(木) 01:02 ], 累計 1 回
アバター
剣崎 宗二
記事: 744
登録日時: 2016年11月12日(土) 20:36
連絡する:

Re: アクターのステートをエネミーに反映(処理速度の向上)

投稿記事 by 剣崎 宗二 »

ループ自体に具体的にどのようなコマンドを使用しているのかが分からないので、ざっくりとですが…
直接コピーは如何でしょうか。

繰り返し処理(エネミーの数だけ実行){
$gameTroop.members()[敵のNO]._states = JsonEx.makeDeepCopy($gameActors.actor(アクターのNO)._states);
$gameTroop.members()[敵のNO]._stateTurns = JsonEx.makeDeepCopy($gameActors.actor(アクターのNO)._stateTurns);
}
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
syouji
記事: 29
登録日時: 2017年6月22日(木) 00:35

Re: アクターのステートをエネミーに反映(処理速度の向上)

投稿記事 by syouji »

剣崎 宗二 様

お世話になります。

繰り返し処理はツクールMVの機能を使用。
条件分岐で条件を達成した場合、ループの中断を行っていました。

教えていただいたスクリプトを実装したところ
短い処理時間で、ステートと残りターン数 どちらもコピーできました。
テストしてみましたが、処理に問題はなさそうです。

非常に助かりました。
教えていただき、ありがとうございます!
返信する

“MV:質問”に戻る