【目標】
「1フレームあたりの処理が500000個を超えました!」と出るエラーを解消する
ウディタに少し慣れたころからよく出会う、このエラーメッセージの原因と対処法を理解します。
一度理解してしまえば、次からはとっさに対応できるようになりますよ。
ウディタ(Ver.1.31段階)では1フレーム中(=1/60秒)の間の処理は50万個が限界です。 つまりこのエラーは1フレーム中に50万個以上の処理をしてしまっているのが原因です。 では、何故このようなエラーが起きるのでしょうか。 |
【無限ループに陥っている場合】 「無限ループ」とは、あるループ内で、 それを抜け出すことができず、無限に同じ処理を繰り返すことです。 この結果、1フレーム内での処理が50万個を超えることがよくあります。 主な原因は以下の二つです。 |
@ループに「ループ中断」がない ループが中断されないため、 50万個どころか無限にループし続けている状態です。 ループの適切な位置に「ループ中断」を入れることで、 エラーが解消することがあります。 |
|
◆「ループ中断」を入力するには ・マップイベントエディタを開いて、 「■コマンド入力ウィンドウ表示■」をクリックしてください。 ・上部タブを「その他1」に切り替えます。 ・上部タブより少し下にある「ループ中断」をクリックします。 |
|
【One Point!】 また、ループ内で条件を満たすことができずに、 「ループ中断」を実行できていない場合も考えられます。 以上、以下、より大きい、未満、きちんと条件を満たせているか、 条件分岐に使っている変数が間違っていないかを確認しましょう。 |
|
Aイベントの自動実行 自動実行イベントは 「実行し終わっても自動的に、最初からまた同じことを繰り返す」 という性質を持っているので、 これも一種の無限ループになってしまう場合があります。 この場合、原因である「自動実行」はループではなくイベントなので、 ループ中断の代わりに「イベントの一時消去」を使ってください。 |
|
◆「イベントの一時消去」を入力するには ・マップイベントエディタを開いて、 「■コマンド入力ウィンドウ表示■」をクリックしてください。 ・上部タブを「その他1」に切り替えます。 ・下段の下から3つめにある「イベントの一時消去」を選択。 ・対象は「このイベント」にして、フェードは[0]を入力します。 ・設定できたら「入力」ボタンをクリック。 |
|
【One Point!】 この場合も、自動イベントの開始条件が満たされ続けているために イベントが起動し続けている、と言いかえることができます。 つまり、自動イベントでは、イベント自体を消してしまう方法の他にも イベントの最後で条件を満たさない状態にしてやることでループから抜ける ということもできるのです。 |
【単純に処理がオーバーしている場合】 アクションゲームなどで並列イベントを使う場合等によく起こります。 適切な場所にウェイトを挟むか、処理数を減らすことが主な対策法です。 |
◆「ウェイト」を入力するには ・マップイベントエディタを開いて、 「■コマンド入力ウィンドウ表示■」をクリックしてください。 ・次に、上部タブを「その他1」に切り替えます。 ・下段の下から2つめの「ウェイト フレーム」を選択してください。 ・最後に、右下の「入力」をクリックすると、 イベントに1フレームのウェイトが入力されます。 |
|
<執筆者:ウディタ公式ガイド執筆コミュ。>