2018年04月30日
実験:スイッチの判定処理について
◆実験:スイッチの判定処理について
スイッチの判定処理について負荷の少ない方法を調べたときの話です。
取り組み上、プラグイン、スクリプトを使用しない前提で書いている記事なので、コラム的にご覧ください。
対策は結論がでているので、記事末尾の参考記事をぜひ。
同一マップ限定で何かの処理をスイッチONで開始(例.エンカウント0、光源処理、宝箱ポップ、BGM変更)マップ切り替え時にスイッチをOFFにして初期化をするということをやっていました。
座標1.1にこんなイベントを設置するといった具合ですね。
◆スイッチの操作:#0341 test1 = OFF
◆イベントの一時消去
トリガー:自動実行
たった1つならまだしも複数の処理(スイッチ)をON→OFFにする必要が生じた場合、次の2通りが一般的ではないでしょうか。
@一斉OFF
◆スイッチの操作:#0341..0350 = OFF
◆イベントの一時消去
A条件分岐でONの場合のみOFF
◆条件分岐:test1がON
◆スイッチの操作:#0341 test1 = OFF
◆
:分岐終了
◆条件分岐:test2がON
◆スイッチの操作:#0342 test2 = OFF
◆
:分岐終了
…以下続く
◆イベントの一時消去
この場合、どちらが処理負荷が低いのか試してみました。
結論としては、マップ切り替え時にはマップ初期化処理でイベントチェックが走るため変わらないとのことでした(ご回答くださったしぐれん様に感謝です)。
テストプレイ中にメニュー画面の切り替えをすると更新内容を即反映できるのは、この処理のためだったのですね。
逆に言うと、画面を切り替えない(メニュー画面の呼び出しのようなシーン遷移含む)
スイッチOFF時の判定なら、条件分岐の分軽くなる可能性はありますが、その場面はおそらく限定的。
それならば実装作業のコストを考えてパターン@で管理した方が早いという話でした。
予備知識として以下ご参考まで。
・スイッチON/OFF、変数の変化は同一MAP内の全イベントチェックを走らせる
1.スイッチ=Game_Switches Classの変更、Game_Variables Classの変更がsetValue() で格納される
2.1の度にGame_Map Classの refresh() =更新処理処理が走る
・スイッチ、変数の値を直接指定することで全イベントチェックを回避することは可能
-具体的には $gameVariables._data や $gameSwithes._data の値を変更する
解説や取り組まれた好例は次の記事が参考になります。
並列処理でスイッチや変数を操作すると重くなる【ツクールMV】(パラドレ様)
https://paradre.com/%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86%E3%81%A7%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%84%E5%A4%89%E6%95%B0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%A8%E9%87%8D%E3%81%8F%E3%81%AA%E3%82%8B
【ツクールMV Tips】ゲーム動作軽量化に潜むsetValueと$gameMap.refresh()の罠(terunon様)
http://ch.nicovideo.jp/terunon/blomaga/ar988845
スイッチの判定処理について負荷の少ない方法を調べたときの話です。
取り組み上、プラグイン、スクリプトを使用しない前提で書いている記事なので、コラム的にご覧ください。
対策は結論がでているので、記事末尾の参考記事をぜひ。
同一マップ限定で何かの処理をスイッチONで開始(例.エンカウント0、光源処理、宝箱ポップ、BGM変更)マップ切り替え時にスイッチをOFFにして初期化をするということをやっていました。
座標1.1にこんなイベントを設置するといった具合ですね。
◆スイッチの操作:#0341 test1 = OFF
◆イベントの一時消去
トリガー:自動実行
たった1つならまだしも複数の処理(スイッチ)をON→OFFにする必要が生じた場合、次の2通りが一般的ではないでしょうか。
@一斉OFF
◆スイッチの操作:#0341..0350 = OFF
◆イベントの一時消去
A条件分岐でONの場合のみOFF
◆条件分岐:test1がON
◆スイッチの操作:#0341 test1 = OFF
◆
:分岐終了
◆条件分岐:test2がON
◆スイッチの操作:#0342 test2 = OFF
◆
:分岐終了
…以下続く
◆イベントの一時消去
この場合、どちらが処理負荷が低いのか試してみました。
結論としては、マップ切り替え時にはマップ初期化処理でイベントチェックが走るため変わらないとのことでした(ご回答くださったしぐれん様に感謝です)。
テストプレイ中にメニュー画面の切り替えをすると更新内容を即反映できるのは、この処理のためだったのですね。
逆に言うと、画面を切り替えない(メニュー画面の呼び出しのようなシーン遷移含む)
スイッチOFF時の判定なら、条件分岐の分軽くなる可能性はありますが、その場面はおそらく限定的。
それならば実装作業のコストを考えてパターン@で管理した方が早いという話でした。
予備知識として以下ご参考まで。
・スイッチON/OFF、変数の変化は同一MAP内の全イベントチェックを走らせる
1.スイッチ=Game_Switches Classの変更、Game_Variables Classの変更がsetValue() で格納される
2.1の度にGame_Map Classの refresh() =更新処理処理が走る
・スイッチ、変数の値を直接指定することで全イベントチェックを回避することは可能
-具体的には $gameVariables._data や $gameSwithes._data の値を変更する
解説や取り組まれた好例は次の記事が参考になります。
並列処理でスイッチや変数を操作すると重くなる【ツクールMV】(パラドレ様)
https://paradre.com/%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86%E3%81%A7%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%84%E5%A4%89%E6%95%B0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%A8%E9%87%8D%E3%81%8F%E3%81%AA%E3%82%8B
【ツクールMV Tips】ゲーム動作軽量化に潜むsetValueと$gameMap.refresh()の罠(terunon様)
http://ch.nicovideo.jp/terunon/blomaga/ar988845
【このカテゴリーの最新記事】
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7605034
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック