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