Scene_Mapのupdateで値を代入し続けるのは負荷ヤヴァイですかね

アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Scene_Mapのupdateで値を代入し続けるのは負荷ヤヴァイですかね

投稿記事by にゃたま » 2019年3月13日(水) 20:34

自作のプラグインで以下のように値を代入し続けるのは負荷的にどうなんでしょう…
常に$gameSystem._windowVisibleを this._window.visibleに代入し続けるのが負荷的に
よくなさそうなのでGame_System.prototype.setWindowVisible内から
直接Scene_Mapのthis._window.visibleに値を代入できると
常にScene_Map.prototype.updateメソッド内でthis._window.visibleに
代入し続けないで良いと思うのですが、この変数(this._window.visible)に
直接値を代入する方法はないものでしょうか?

この自作プラグインではマップにウィンドウを表示させて
常にupdateをかけて値を代入し続け最新の情報に更新しています。
尚、初期の表示状態は非表示で必要なときにイベントコマンドのスクリプトから
$gameSystem.setWindowVisible(true);で表示するようにしています。

尚、以下のコードは本コードから抜粋したものですが変数名等は変更しています。
動作確認は行ってません。参考程度にみてください。

追記
因みにウィンドウ内で表示される値が変わるタイミングは
アイテム選択の処理でアイテムを選択したときです。
即ちマップ画面では基本アイテム選択の処理内で更新されるウィンドウになります。
なので常に更新せず必要に応じて(アイテム選択時等)更新できると負荷的に良いと思います。

コード: 全て選択

var _Scene_map_update = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
    _Scene_map_update.call(this);
       
    this._window.visible = $gameSystem._windowVisible;
    this._window.refresh();
}


そのほかのコードは以下のようになっています。

コード: 全て選択

Game_System.prototype.setWindowVisible = function(visible) {
     this._windowVisible = visible;
}

function Window() {
   this.initialize.apply(this, arguments);
}
   
Window.prototype = Object.create(Window_Base.prototype);
Window.prototype.constructor = Window;
   
Window.prototype.initialize = function(x, y, w, h) {
   Window_Base.prototype.initialize.call(this, x, y, w, h);
   this.refresh();
};

Window.prototype.refresh = function() {
    this.contents.clear();
    this.drawValue(getValue(), 0, 0, 200);
}

var Scene_map_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function() {
   Scene_map_start.call(this);
       
   this._window = new Window(520, 0, 290, 70);
   this.addWindow(this._window);
   this._window.visible = false;
};


追記
こちらの件思ったより負荷が少ないようでしたので
これにて解決済みとします。
もし上記のスクリプトでは処理が重くなると判断できるようなら
当トピックにご報告願います。
検証したところむしろほかの並列処理イベントで毎ミリ秒ごとに
ゲーム変数に値を代入していたのが重かったようです。
wait(60)を入れて1秒ごとの処理にしたら劇的に軽くなりました。

“MV:質問” へ戻る