解決済み!複数の変数の中から最小を求めたいです。

あきまり
記事: 48
登録日時: 2018年2月04日(日) 06:45

解決済み!複数の変数の中から最小を求めたいです。

投稿記事by あきまり » 2022年7月30日(土) 20:56

質問失礼します。

現在20個の変数の中から最小のモノを探し出す手段として

var a = [$gameVariables.value(381), $gameVariables.value(382), $gameVariables.value(383)
, $gameVariables.value(384), $gameVariables.value(385), $gameVariables.value(386)
, $gameVariables.value(387), $gameVariables.value(388), $gameVariables.value(389)
, $gameVariables.value(390), $gameVariables.value(391), $gameVariables.value(392)
, $gameVariables.value(393), $gameVariables.value(394), $gameVariables.value(395)
, $gameVariables.value(396), $gameVariables.value(397), $gameVariables.value(398)
, $gameVariables.value(399), $gameVariables.value(400)];
var min = Math.min.apply(null, a);
$gameVariables.setValue(11, min)[list=][/list]

検索して出て来たMath.minでやってみたんですがこのやり方だと求めた瞬間処理が重くなる?
一瞬フリーズしてしまうのでもっと効率の良い、フリーズしないやり方をご存じの方が居ましたらどうか教えて頂きたいです。
最後に編集したユーザー あきまり on 2022年7月31日(日) 03:19 [ 編集 1 回目 ]

アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 複数の変数の中から最小を求めたいです。

投稿記事by Plasma Dark » 2022年7月31日(日) 02:36

配列の中から最小値を求める処理自体は、特に重たい処理ではなさそうに見えます。
こちらの新規プロジェクトでMVエディタ1.6.3から起動したテストプレイにおいて同様の処理を行ってみたところ、特に重くなる様子はありませんでした。

イベントコマンドのスクリプトではなく、プラグインコマンドにしてしまうほうがevalしない分いくらか効率は良いはずですが、
この規模のスクリプトで重くなるようであればどちらにしても大差ないと予想します。

実感できるほど重くなる原因があるとすれば、実行環境かプロジェクトの内容に依存した要素の可能性もあります。
新規プロジェクトで(イベントの少ないマップ、並列コモンイベントの少ないプロジェクトで)同じ処理をさせてみても重くなるかどうか試してみてください。
あきまり
記事: 48
登録日時: 2018年2月04日(日) 06:45

Re: 複数の変数の中から最小を求めたいです。

投稿記事by あきまり » 2022年7月31日(日) 03:19

Plasma Dark 様
返信ありがとうございます。
実行環境かプロジェクトの内容に依存した要素の可能性もあります。と頂いた通り調べてみたところ

共に使用していたイベントとイベントの距離を測るプラグインの処理が重い事が原因でした、
対応としてはプラグインの処理間に少しのウェイトを設ける事で処理の軽減が出来、フリーズせずに求めていた動作が行えました、返答ありがとうございました。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 解決済み!複数の変数の中から最小を求めたいです。

投稿記事by Plasma Dark » 2022年7月31日(日) 09:26

解決されたようで何よりです。

混乱防止のため、公式フォーラムの書き込みは削除するか、本記事へのリンクを明示しておいてください。


イベント間の距離を計算するだけで重くなるというのは奇妙ですが、並列処理で計算させ続けているのでしょうか。
ウェイトを挟んで問題なく動いているようであれば気にしなくても良いですが、必要なタイミングでのみ計算することも検討されると良いと思います。
(もちろん、プロジェクトの都合次第では並列で計算させ続ける方法が最適なケースもあります)

“MV:質問” へ戻る