ターン終了時が重いので調査しました

こんにちは~。
戦闘ターン終了時の動作がスマホでなんかやたらと重かったので、調査した内容を記述します。

■はじめに
Window_BattleStatus を継承してマップ上にステータスを表示させたら、スマホ上での動作が重かったため調査していたところ、戦闘ターン終了時の動作も重かったため追加調査した結果、同じ処理が重いことが分かった。

■原因と対処
戦闘ターン終了時の動作が重いのは、BattleManager.refreshStatus が過剰に呼ばれているから……と思われる。

この BattleManager.refreshStatus は Window_BattleStatus.prototype.refresh を呼び出しており、処理としては味方のステータスWindowの更新である。

以下の画像で、this.refreshStatus(); と書かれている箇所である。コメントアウト済み。
(その下の行は別件の私の都合でコメントアウトしてある)
これを見ると、battler(キャラクター1体) に対して forEach で繰り返し処理を行っているように見えるが、refreshStatus 処理は全員分のステータス表示を更新するため、1回やれば済むはずである。
よって、forEach外に処理を置くべきと考える。

endTurn.png

今回は、パーティコマンド入力前に行っている refreshStatus 処理にお任せする事にして、コメントアウトしている。

尚、refreshStatus 処理は、BattleManager 内で他にも何か所か呼ばれており、その中にも必要なさそうな箇所がある。
ただし、ツクールMVの全機能について確認したわけではないため、本当に必要ないのかは未確認。

■おわりに
今回は、refreshStatus を呼ぶ回数を減らす事で対処したが、refreshStatus 処理自体がある程度重い処理である模様。
また、私の自分用プラグインには反映させているが、検証不足のためプラグインとして公開していないし特に公開する予定もないので、ご了承ください。

以上、よろしくお願いします。
 
トップ