みなわ / 最果てProject 2019/08/22 19:45

setValue()と_data[]の性質の違い

 がっつり書いたら逆に読み難くなってたことに気づいた瞬間の悲しみよ……。
 まあ、ツクール系製作小ネタ、自身への備忘録も兼ねて書き置いてみます。

 本日のお題はこちら。
「$gameVariables.setValue()と$gameVariables._data[]の性質の違い」です。

 さて、上の2記述はどちらもツクールMVのスクリプトで使用する「変数に任意の値を入れるコマンド」です。イベントコマンドの「変数の操作」をスクリプトで行うための代物ですが、ググると大抵はsetValueのほうが引っ掛かるのでそっちは知ってるツクラーさんも多いでしょう。

 これらのうち「setValue」とイベントコマンドの「変数の操作」は、無計画に使うと制作したゲームが重くなる原因になり得ます。
(注:既定のコアスクリプトを使用&プラグイン補正がないという前提で)

 なぜかというと、これらは変数の値を操作した後、マップ上の全イベントのイベントページ差し替え(以下、リフレッシュとする)判定を行うという処理もセット販売してくれるからです。rpg_objects.jsにそう書いてある。たぶん。
(ここでは変数制御のみ例に挙げてますが、スイッチやセルフスイッチの操作に関しても同様の問題が発生します)

 で、ツクールは仕様として、1/60秒ごとに上記のリフレッシュ判定を行っており、フラグがON(「変数の操作」実行時など)の場合にすかさず全イベントのリフレッシュ処理を実行してくれます。

 仮に、終了条件を設定しない並列処理イベント(各種フラグの状況をチェックする用途など)内で「変数の操作」を行っていた場合、並列処理イベントも1/60秒ごとに繰り返されるため、上記のリフレッシュ処理と組み合わさって凄まじい処理負荷が発生しかねません。

 そこで、$gameVariables._data[]の出番です。このスクリプトコマンドから変数に値を設定すると、リフレッシュ処理のフラグを弄らないので処理が重くならないのです! それじゃさっそく、制作中のゲームの中身を全部_data[]の形に書き換えちゃいましょう! これでカクカクもっさり現象とは永遠におさらばだ!

 ……と喜び勇んで実行すると、かつての当方と同じ目に遭うので止めましょう。なんかね、JSONファイルをエディタに叩き込んで文字列置換したら、あちこちのイベントの動作がおかしくなっちゃったの。( ;∀;)

 いや、ちょっと考えてみれば当然なんです。リフレッシュ処理を省いて変数操作しているってことは、変数がイベントページの出現条件満たしてもページ切り替わるわけないのDeath!! 参考にさせていただいたページにも、ちゃんと注意事項として書かれてたのにねえ。。。

 というわけで、自戒の意味も込めて動画作成。スクリプトやプラグイン関係は、ちゃんと仕様を理解して使おうねという話でした。(無料プランのほうには、さらにsetValueと_dataでどれだけFPSに差が出るかの検証動画を載せてます)

フォロワー以上限定無料

当サークルのゲーム制作状況をチェックしたり、ちょっとしたイラストを閲覧できるプランです。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

最新の記事

記事のタグから探す

月別アーカイブ

記事を検索