リフレッシュの話

最終更新 : 2022/01/17

カテゴリはツクールMZですが、ツクールMVでも同じ話です。

アクション多めのものを作ってみようかなと思っている方、並列処理を使ってみようかなと思っている方向けの記事になります。

そもそもリフレッシュって何? という話と、リフレッシュを回避するスクリプトの書き方を紹介します。

知っている方は読まなくて大丈夫です。

リフレッシュとは

まず、イベントの編集画面を見てみましょう。左上の欄でイベントの出現条件を設定できるようになっています。

画像

ゲーム中に、この出現条件に関係する値が設定された時には、たとえ同じ値であったとしても、マップ上の全イベントの全ページについて、出現条件を満たすかどうかのチェックが実行されます。

また、コモンイベントの実行条件もチェックされます。コモンイベントの条件はスイッチだけのはずですが、アクターやアイテムが変更されてもチェックされます。

そしてチェックされた結果、イベントのページが切り替わったり、グラフィックが更新されたり、イベント内容が自動実行されたりします。この一連の動きを通称、「リフレッシュ」と呼んでいます。

このリフレッシュ、処理の内容から分かる通り、イベント(のページ数)が多いほど、処理が重たくなります。

ゲームがカクつく原因?

並列処理やループ処理などで、このリフレッシュがたくさん実行されると、処理が重くなるということがよく言われています。ただ、実際に検証した人によると、「あんまり関係ないのでは?」みたいな結果にもなっているようです。都市伝説ですね。

ただ、私がMV時代に作ったゲームでは重くなった覚えがあります。そしてリフレッシュを意識して対策したら改善されたので、環境や処理内容にもよるということでしょう。とりあえず、気を付けるに越したことはありません。

気を付けるというのは、無駄なリフレッシュが少なくなるように作るということです。

注目はスイッチ・変数

アクターやアイテム変更時もリフレッシュは発生するのですが、そう頻繁に更新されないでしょうから、無視していいと思います。よく使うスイッチ・変数操作に注目したほうが効率的です。

スイッチ・変数操作をする時は必ず条件分岐を設けて、最低限のリフレッシュが発生するように組み立てましょう――というのは、ちょっと手間ですし、難しいですよね。そこの条件分岐を間違ってしまえば、結局たくさんリフレッシュが実行されてしまいます。

できるだけ確実にリフレッシュを避けたいところです。

さて、どうすればいいでしょうか。

答えは簡単で、イベントエディタの「スクリプト」を使うだけです。

スイッチ1をONにする。

$gameSwitches._data[1] = true;

スイッチ1をOFFにする。

$gameSwitches._data[1] = false;

変数1に777を設定する。

$gameVariables._data[1] = 777;

上記のように書くと、リフレッシュなしに値を設定できます。

リフレッシュが不要な場面ではこの書き方を使うと安心でしょう。

ただし、「スクリプトを実行すること自体がちょっと重い処理」という噂もあります。

イベントの数が少ないとか、リフレッシュがそんなに重なっていないなら、わざわざこんな手間をかけなくても、ゲームは重くはならないでしょう。

ゲームがカクつくほど重くなってしまったら、そこで初めてリフレッシュ回避を検討する、というくらいでちょうどいいと思います。

そして、そんな時には「リフレッシュにこだわるプラグイン」を使ってみてください。

補足1:スクリプトで設定しつつリフレッシュする

おまけ情報です。

スクリプトで次のように書くと、値を設定しつつ、リフレッシュが実行されます。イベントエディタから「スイッチの操作」「変数の操作」を使った場合と同じ動きですね。

スイッチ1をオン

$gameSwitches.setValue(1, true);

スイッチ1をオフ

$gameSwitches.setValue(1, false);

変数1に777を設定

$gameVariables.setValue(1, 777);

補足2:スクリプトで値を参照する

ついでなので、スクリプトで値を参照(取得)する書き方も紹介します。

スイッチ1の値を参照

$gameSwitches.value(1);

※スイッチが未設定だと、結果はfalse(オフ)です。

変数1の値を参照

$gameVariables.value(1); 

※変数が未設定だと、結果は「0」です。

次の書き方でも値を参照できますが、未設定の場合の取得結果は「undefined値」です。意図がなければ、使わないようにしましょう。

スイッチ1の値を参照

$gameSwitches._data[1]; 

変数1の値を参照

$gameVariables._data[1]; 

プロフィール

溟犬一六(めいけんいちろ)。雑種のクリエイター。ハンドル名はガバチョなど