| WOLF RPGエディター(ウディタ)/バグ・エラー【サイトトップへ戻る】 ■1フレームあたりの処理が500万回を越えました! (更新:2026/08/04) このようなエラーが表示されましたか? ![]()
■エラーの原因 ウディタは60分の1秒単位で処理されており、1秒間に「60フレーム」で処理しています。
その1フレームごとに、キー入力や変数の値を変えるイベントコマンドを処理していますが、 ウディタでは1フレームで処理できるイベントコマンドの数(コマンド処理数)が「500万個未満」となっています。 そのため、500万個を超えて処理しようとすると、「1フレームあたりの処理が500万回を越えました!」のエラーが発生します。 コマンド処理数は…
つまり…
基本的にイベントコマンド1個につき処理数が1増えますが、以下のイベントコマンドでは処理数の増加が異なります。
1フレームの中で複数のイベントが同時に動いている場合は、 全てのイベントの処理数を合わせた合計処理数を500万個未満にする必要があります。 このエラーは「ループ処理」でよく発生します。 例えば以下のような無限ループを設定すると、すぐにエラーが発生します。 ▼ループを終了させる設定が無いため、無限ループが発生
▼主人公のX座標が40未満の時に無限ループが発生
ループ処理では「ループ内のコマンド数×処理回数」の分だけ処理数が増えます。 そのため、見た目では少ないイベントコマンドでも、意外と処理数が増える事があります。 ▼処理数「41」
▼処理数「341」
起動条件を「自動実行」にして、ウェイトなどの一時停止するイベントコマンドが無い状態でも、このエラーが発生します。 ▼これだけの設定でエラーが発生 ![]() ループ処理のイベントコマンドが無いのにこのエラーが発生する場合は、「自動実行」になっている事が原因の可能性があります。 ▲トップへ戻る▲ ■エラーの発生場所を確認 エラー表示の「処理地点」を見て、どこでエラーが発生しているのかを確認してください。 ![]() 処理地点の表示は、右から左に向かって読み取ります。 上図の…
[F2]を押すと、エラーが発生した処理地点(コモンイベント[216]の2行目)の設定画面を開く事ができます。 なお、エラーの内容やエラーが発生した場所を質問掲示板に書き出したい時には、 デバッグウィンドウに表示されているエラーの文章をコピーして、 それを質問掲示板に貼り付ける事で、簡単にエラーの内容を書き出す事ができます。 上記のエラーが発生した処理地点(コモンイベント[216]の2行目)は「500万回の処理数を超えた場所」になりますが、 必ずしも「処理地点=エラーの原因元」であるとは限りません。 例えば…
エラー自体はコモンイベント[216]で発生していますが、 実際のエラーの原因はコモンイベント[215]で無限ループを設定している事が原因になります。 この場合は、コモンイベント[216]ではなく、コモンイベント[215]の設定を見直す必要があります。 また10個の並列実行を動かしていて、 9個目の並列実行の処理を終えた段階で、処理数の合計が「4999900」になっていた場合、 10個目の並列実行で「100」の処理数を実行しただけで、エラーが発生します。 この場合も10個目の並列実行でエラーが発生していますが、実際のエラーの原因は、 9個目の並列実行までに大量のイベントコマンドを処理している事が原因になります。 このように必ずしも「処理地点=エラーの原因元」では無い事があるため、エラーの原因を探るためには、 エラーが発生した処理地点までに、どのようなイベントを処理していたのかを確認する必要があります。 ▲トップへ戻る▲ ■コマンド処理数の調べ方 コマンド処理数を調べる場合は、システム変数[108:[読]現フレーム開始からのコマンド処理数]を使います。 【システム変数[108:[読]現フレーム開始からのコマンド処理数]の説明を見る】 ▼設定例
1フレームの間に実行する全ての処理数を調べる場合は、 コモンIDが最も大きいコモンイベントに以下のイベントを設定してください。 ▼処理数の最大値が更新された時のみデバッグ文を表示
下記の設定は[A]キーを押す事で、処理数の最大値の更新データが初期化され、 処理数の最大値を調べ直す事ができます。
1つのループ処理の処理数など、特定の範囲の処理数を調べたい場合は、 特定の範囲の開始時と終了時の処理数の差分を出す事で、特定の範囲の処理数を調べる事ができます。
なお、システム変数[108:[読]現フレーム開始からのコマンド処理数]の値は、ウェイトを実行すると「0」に戻るため、 もしもウェイトの設定がある場合で処理数を調べたい時には…
▲トップへ戻る▲ ■エラー回避の対策 エラーの回避方法としては、ウェイトを設定する方法があります。 ▼設定例
しかしウェイトを設定する事で、ウェイトを設定した分だけ処理速度が遅くなります。 出来る限りウェイトを実行したくない場合は、 システム変数[108:[読]現フレーム開始からのコマンド処理数]を使って現在の処理数を監視し、 500万個の処理数に近付いたらウェイトを実行すると良いでしょう。 ▼処理数が残り10000未満になったらウェイトを実行
ウェイトを実行するタイミングをギリギリに設定し過ぎると、 イベントの実行状況によっては500万個を超えてしまう事があります。 そのため、条件分岐の設定は「4900000以上」や「4500000以上」などと、少し余裕を持たせて設定した方が良いです。 なお、上記の条件分岐の設定自体も処理数を増やす要因になるため、 大量に設定したり、ループ回数が多い処理の中に設定するのは、お勧めできません。 ウェイト以外の設定方法として、処理Aと処理Bを交互に処理する方法もあります。
YADO作品の『病原体』では、敵となる病原体を3つのグループに分けて… 1フレーム目=敵グループAを処理 2フレーム目=敵グループBを処理 3フレーム目=敵グループCを処理 と処理して、処理数の増加を抑えていました。 イベントコマンドの設定方法を工夫して、処理結果を変えずに処理数を抑える設定方法もあります。 ▼一括で処理
▼キャラクターの座標を「変数呼び出し値」で取得
▼ループの最後に「ループ開始へ戻る」を設定(ループ1回につき、処理数が1減る)
▼条件分岐「1以上」を回数付きループ+ループ中断で代用(条件を満たす場合で、処理数が2減る)
▼条件分岐「0と同じ」「1と同じ」をラベルで代用(条件を満たす場合で、処理数が4減る)
なお、上記で紹介している設定方法は、あくまでコマンド処理数が500万回を超えそうな時に使用する設定方法です。 コマンド処理数の余裕がある場合は、無理に上記のような設定を行う必要はありません。 イベントコマンドの【コメント文】や【デバッグ文】なども処理数にカウントされるため、 特にループ回数が多いループ処理の中に設定するのはお勧めできません。 ▲トップへ戻る▲ ■補足 デバッグ作業が終わり…
コモンイベントの検索機能を使って「\sys[108]」の文字列で検索する事で、簡単にデバッグ文を見つける事ができます。 エラーの原因を探すために、デバッグ文を大量に設定したり、一時的に並列実行を停止したり、 部分的にイベントコマンドの設定を変更したりする場合は、 作品データを複製して、複製した作品データでエラーの原因を探した方が良いでしょう。 複製した作品データならば、イベントを削除したりしても、あとで元に戻す作業が必要無くなります。 処理数が「500万個未満」ならばエラーは発生しませんが、 しかし毎フレームごとに数百万個の処理数となると、かなりの処理落ちが発生する可能性があります。 そのため、エラーが発生しないからと言って、毎フレームごとに大量のイベントコマンドを処理する設定はお勧めできません。 なお「処理落ちした状態」を体験したい方は、以下のイベントをコモンイベントに設定してみてください。
▲トップへ戻る▲ |