0

私は現在、ローグライクのコーディングを行っており、必要なことを独学しています。

私はここでいくらか答えられたことがわかった問題に行き詰まっています: ゲーム内のエンティティを整理する最良の方法?

その質問に対する最良の回答で説明されているクラスを持つエンティティツリーが必要です。

各エンティティの「スクリプト」を実行するために std::set を反復処理することについて言及していますが、説明できないことがいくつかあります。

  1. そのような実装では、座標 (クラス内の int) で何かを検索するにはどうすればよいですか? 一致する結果が見つかるまですべてを繰り返す For を実行するよりも簡単だと思います...

  2. 同じ場所にある複数のもの (アイテム スタックなど) をどのように処理しますか? クラスの複数のインスタンスに同じ座標を含めることができることはわかっていますが、そのような状況でルックアップから何が返されるのでしょうか?

  3. たとえば、エンティティの「速度」統計の降順で反復する方法はありますか?

ありがとう〜

4

2 に答える 2

0

ポインターを介してエンティティを操作するため、1 つのエンティティを複数のコンテナーに配置しても問題はありません。したがって、1)マトリックス>レベル; (ここで、Matrix は自分で実装する単純な 2 次元配列です)、これも特定の場所で複数の要素を処理します。level[row][column] は std::vector への参照を返します。(実際には、std::vector を EntityList などのカスタム クラスにラップし、非常に単純なインターフェイスを使用します。これにより、将来の選択肢が開かれます。)

3 に関しては、最も簡単な解決策は、リストをローカルの EntityList にコピーし、必要な基準に従って並べ替えることです。

于 2011-03-15T09:22:57.763 に答える
0

あなたが言ったようにそれを行う最善の方法は、エンティティの「グローバル」配列を持つことです(ただし、それらをハンドラークラスにカプセル化してください。そうしないと、おそらく最終的に自分自身を殺したいと思うでしょう:p)

基本タイプのエンティティを持ち、クレートや敵などからさまざまなものを派生させ、さまざまなタイプを専門化するためのクラスから派生したさまざまなクラス (grue や bat など、別のクラスを持つ可能性がありますか? これは多くの異なるクラスに変わる可能性がありますが、最善の方法は、通常、オブジェクトごとにパラメーターを設定することです (敵の場合、ヘルス、ダメージ、スピードなどがあります)。

それらをすべて同じ配列に格納し、フレームごとにそれらすべてに対して呼び出す仮想更新関数を用意します。

于 2011-03-15T07:40:12.627 に答える