白白白 さんが書きました:プラグインはさらに処理が重いと思い込んでおり、プラグインにした方が軽いというのは目から鱗でした。
一応補足ですけど必要最小限を比較した場合の話です。
基本的に余計な機能が付いた総合プラグインだったり
挙動の理解が浅くて未熟なプラグイン素材を利用すると却って遅くなります。
また、後述のケースも遅くなりますね。
白白白 さんが書きました:という並びで計測し、F8で確認したところ、計測結果が0msだったのですが、これは0.1msすらかかっていない(処理時間が短すぎて計測不能)ということでよいのでしょうか?
また、一応のご報告ですが「console.timeLog("タイマー名");」を入れるとエラーが発生しました。
通常ベンチマークテストをする場合は1000~10000回ほど処理を繰り返して計測します。
こんな感じのループ構造を作って計測してください。
console.timeLogに関してはMZでは使用可能ですがMVでは使用不可能のようです。
おそらく使用しているnode.jsのバージョンに拠るものだと思います。
コード: 全て選択
◆変数の操作:#0004 ループカウンタ = 0
◆スクリプト:console.time("ベンチマークテスト");
◆ループ
◆変数の操作:#0004 ループカウンタ += 1
◆条件分岐:ループカウンタ ≥ 1000
◆ループの中断
◆
:分岐終了
◆
:以上繰り返し
◆スクリプト:console.timeEnd("ベンチマークテスト");
白白白 さんが書きました:出来ればアドバイス通りにプラグイン化&プラグインコマンド呼び出しで対応したいのですが、私に全く知識がなく方法が分からず、可能でしたら「◯/◯にする」「◯-◯%の補正を掛ける」というプラグインを作成して頂くことはできないでしょうか?
パッと思い浮かんだのはこんな感じですかね。
ただ先に書いておくと単純比較するとこっちの方が遅いと思います。
理由は簡単に言えば処理が短すぎるからです。
例えば補正を掛けて何をしたいのか?、もっと大きなブロックで処理を切り出して
プラグインに処理を委譲すれば最適化に繋がると思いますけど
この部分だけプラグインに任せても呼び出しコストの方が高くつきますね。
状況に合わせて利便性と処理速度を天秤に掛ける事が肝要だと思います。
コード: 全て選択
(() => {
'use strict'
const pluginMethods = {};
const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
if (pluginMethods[command]) {
pluginMethods[command](...(args.map(Number)));
} else {
_Game_Interpreter_pluginCommand.apply(this, arguments);
}
};
// 変数ID, 分子, 分母
pluginMethods.method1 = function(varId, n, d) {
if ( d === 0 ) {
console.error("method1で0除算を検知しました");
} else {
let value = $gameVariables.value(varId);
value *= n / d;
$gameVariables.setValue(varId, Math.round(value));
}
}
// 変数ID, 乱数下限, 乱数幅
pluginMethods.method2 = function(varId, min, volume) {
let value = $gameVariables.value(varId);
value *= min + Math.random() * volume;
$gameVariables.setValue(varId, Math.round(value));
}
})();
使い方はプラグインコマンドで
method1 2 3 4
とした場合、「変数2番に対して3/4の補正を掛ける」というコマンドになります。
つまり「method1 変数ID 分子 分母」の指定順です。
method2 2 0.8 0.2
とした場合、「変数2番に対して下限0.8、乱数幅0.2の補正を掛ける(80-100%)」というコマンドになります。
つまり「method2 変数ID 乱数下限 乱数幅」の指定順です。
先に触れましたがこれ自体はあまり実用的とは言い難く、プラグイン自作時の参考例程度にしてください。
特にmethod1、method2とか分かりづらいですけど
pluginMethods.method1の部分を適当に書き換えればそれがプラグインコマンド名に反映される仕組みなので。
改造する場合は例えばプラグインファイルの下段に
コード: 全て選択
pluginMethods.新プラグインコマンド名 = function(第一引数, 第二引数, 第n引数) {
// 適当な処理
}
と追加してプラグインコマンドから
「新プラグインコマンド名 第一引数 第二引数 第n引数」と書く事で
新しい自作プラグインコマンドを呼び出す事が出来ます。
引数はいくつ増やしても良いし、逆に0個でも良いです。