Allegro 5 を使用して C++ でゲームを作成しています。Allegro 5 には、イベント キューにスタックされたイベントがあります (マウス クリックや 1/FSP 時間後にタイマーが作動したなど)。だから私の質問は、私のゲームのメインループのロジックはどうあるべきか、それともイベントベースなのでメインループなしで実装できるのかということです??
実際のゲームがどのようにそれを行うかについてのアイデアはありますか? リンクは良いでしょう。
私は Allegro の経験はありませんが、SFML を使用して OpenGL でゲームをレンダリングするときは、メイン ループの一部として自分でイベント キューをポーリングします。以下の疑似コードのようなもの (ただし、より抽象化されています):
while(game_on)
{
auto events = poll_occured_events();
for_each(events, do_somewithng_with_event);
render_game();
}
これまでのところ問題なく動作しているようです... Allegro でも同様のことが可能だと思います。ゲームを継続的に更新する必要があるため、イベント ドリブン ゲームは注意が必要です。
(おそらく) メイン ループを別のスレッドに配置してから、イベント スレッドとゲーム スレッドの間で同期することができます...
私も Allegro の経験はありませんが、ロジックは同じです。
(いわゆる)実際のゲームにもゲームループがありますが、違いは、並行して動作するが異なる時間間隔内で動作するスレッドを使用することです。たとえば、物理計算、AI、ゲームプレイ、サウンド、レンダリングのためのさまざまなスレッドがあります...ユーザーイベントは通常、ゲームプレイイベントがその前に収集され (Max が示唆するように)、次のフレームまで消費されるためです (実際にはいくつかのスレッドで収集されます)。たとえば 5 フレーム)。
フレームが長くなりすぎる可能性があるため、OS からのすべてのイベントがゲームによって収集されるため、これらの入力はバッファー入力と呼ばれます。unbuffered input と呼ばれる別の方法もありますが、これは離散的には機能しませんが、代わりにゲームループ中にクエリされたインスタンスでテストします。
ユーザー入力が非常に重要で、入力をまったく失いたくない場合は、バッファリングされていない場合はバッファリングされていないものを使用できます。ただし、特にデバッグ中は、バッファなしは扱いにくい場合があります。
ここにいくつかのリンクがあります
本からの抜粋 ゲーム エンジン
IOS でのゲーム ループ