0

C++ で記述され、SFML 2D ライブラリを使用して小さなヘビ ゲームを開発しています。問題は、ウィンドウをレンダリングし、そこに何かを印刷するには、

while (App->IsOpened())
{
    //Do the stuff
    App->Clear();
    App->Display();
}

しかし、私は自分のプログラムをより一般的な方法で構築したいと考えています。これにより、ウィンドウを初期化してから、ウィンドウの外側から「RenderARect」や「ClearTheWindow」などのシグナルをウィンドウに送信できます。 while ステートメント。たとえば、レンダリング クラスのインスタンスをダイナミック ライブラリとして使用して、ゲーム コードとレンダリング コードを 2 つの異なる独立したものにすることができます。

このようなシグナル システムを私の SFML プログラムに実装する方法について何かアドバイスはありますか?

PS: libsigc++ については聞いたことがありますが、実装方法がわかりません...

ありがとうございました!

4

1 に答える 1

5

そのような信号を送る必要はありません。その while ループ (メイン ループ) ですべてを処理する必要があり、すべてのフレームをクリアし、領域ではなく個別に全体として描画する必要があるため、SFML は OpenGL を使用します。

ゲーム ロジックをメイン ループから分離する最も明白な方法は、ゲームを OOP にすることです。もちろん、それは別々のファイル内の別々のロジックユニットにのみ分離されますが、それらは同じループ内で「一緒に」実行されます。これは望ましい(しかし少なくとも許容できる)動作だと思います。

したがって、Update() メソッドを持つ Game クラスが作成されます。ここでゲーム ロジックが発生し、イベントが処理され (できれば、イベントは呼び出しの前にクエリされ、Update() にパラメーターとして渡されます)、表示する必要があるすべての状態が更新されます。メインループのすべての反復でこれを呼び出す必要があります。

また、そのクラスには Render() メソッドもあり、必要に応じてすべてを描画します。

したがって、次のようになります。

while (App->IsOpened())
{
    Game->Update();
    App->Clear();
    Game->Render();
    App->Display();
}

PS: 下手な英語で申し訳ありませんが、ご理解いただければ幸いです。

于 2011-03-14T12:01:58.570 に答える