| WOLF RPGエディター(ウディタ)/バグ・エラー【サイトトップへ戻る】 ■1フレームあたりの処理が500万回を越えました! (更新:2026/04/03) このようなエラーが表示されましたか? ![]()
■エラーの原因 ウディタは60分の1秒単位で処理されており、1秒間に「60フレーム」で処理しています。
そして1フレームごとにキー入力を処理したり、変数の値を変えたりしていますが、 この1フレームごとに処理できるコマンド処理数は「500万個」と決められており、 500万個を超えて処理しようとすると、「1フレームあたりの処理が500万回を越えました!」のエラーが発生します。 コマンド処理数は…
つまり…
基本的にイベントコマンド1個につき処理数が1増えますが、以下のイベントコマンドでは処理数の増加が異なります。
1フレームの中で複数のイベントが同時に動いている場合は、 全てのイベントの処理数を合わせた合計処理数を500万個未満にする必要があります。 このエラーは「ループ処理」でよく発生します。 特に以下のような無限ループを設定すると、すぐにエラーが発生します。 ▼ループを終了させる設定が無いため、無限ループが発生
▼主人公のX座標が40未満の時に無限ループが発生
また起動条件を「自動実行」にして、ウェイトなどの一時停止するイベントコマンドが無い状態でも、このエラーが発生します。 ▼これだけの設定でエラーが発生 ![]() ループ処理では「ループ内のコマンド数×処理回数」の分だけ処理数が増えます。 例えば…
また…
見た目は少ない処理数に見えますが、実際にはかなり処理数が増えます。 ▲トップへ戻る▲ ■エラーの発生場所を確認 エラー表示の「処理地点」を見て、どこでエラーが発生しているのかを確認してください。 ![]() 処理地点の表示は、右から左に向かって読み取ります。 上図の…
なお、エラーの内容やエラーが発生した場所を質問掲示板に書き出したい時には、 デバッグウィンドウに表示されているエラーの内容をコピーして、 それを質問掲示板に貼り付ける事で、簡単にエラーの内容を書き出す事ができます。 処理地点はエラーが発生した場所になりますが、必ずしも「処理地点=エラーの原因元」では無い事もあります。 例えば…
エラー自体はコモンイベント[216]で発生していますが、 実際のエラーの原因はコモンイベント[215]が無限ループになっている事が原因になります。 またコモンイベント[215]の後にコモンイベント[216]を実行している場合で、 コモンイベント[215]で「4999000」の処理数を実行している場合は、 コモンイベント[216]の方で「1000」程度の処理数を実行しただけで、エラーが発生します。 この場合もエラーの発生場所はコモンイベント[216]になりますが、 実際のエラーの原因はコモンイベント[215]で大量のイベントコマンドを処理している事が原因になります。 このように「処理地点=エラーの原因元」では無い事もあるため、 エラーの原因を探るためには、エラーが発生したイベント以外にも目を向ける必要があります。 ▲トップへ戻る▲ ■コマンド処理数の調べ方 コマンド処理数を調べる場合は、システム変数[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減る)
なお、上記で紹介している設定方法は、あくまでイベントコマンドを大量に処理する時に役立つテクニックであり、 イベントコマンドを大量に処理しない場合は、無理に設定する必要はありません。 逆に無理に設定しようとすると、設定内容が分かりにくくなって、設定ミスなどが発生しやすくなります。 イベントコマンドの【コメント文】や【デバッグ文】などの設定も処理数にカウントされるため、 特にループ回数が多いループ処理の中に設定するのはお勧めできません。 ▲トップへ戻る▲ ■補足 デバッグ作業が終わり…
コモンイベントの検索機能を使って「\sys[108]」の文字列で検索する事で、簡単にデバッグ文を見つける事ができます。 エラーの原因を探すために、デバッグ文を大量に設定したり、一時的に並列実行を停止したり、 部分的にイベントコマンドの設定を変更したりする場合は、作品データを複製して、 複製した作品データでエラーの原因を探した方が良いでしょう。 複製した作品データならば、イベントを削除したりしても、あとで元に戻す作業が不要になります。 処理数が「500万個未満」ならばエラーは発生しませんが、しかし毎フレームごとに数百万個の処理数となると、 パソコンの処理能力によっては、かなりの処理落ちが発生します。 そのため、エラーが発生しないからと言って、毎フレームごとに大量のイベントコマンドを処理する設定はお勧めできません。 なお「処理落ちした状態」を体験したい方は、以下のイベントをコモンイベントに設定してみてください。
▲トップへ戻る▲ |