1

これは非常に単純で、ほとんどばかげた質問だと思います。どうすればいいのかを忘れてしまったのです。

ユニバーサル GameObjectManager に格納されているゲームオブジェクトがあります。これらのゲームオブジェクトには、単純な int である ObjectID があります。

各タイルが ObjectID のコンテナーを保持する 2D タイル ベースの世界で、これらのゲームオブジェクトを挿入または削除できる必要があります。

このようにして、特定のタイル (例: Tile[10][10]) を取得し、コンテナーから読み取ることで、Tile[10][10] にあるゲームオブジェクトを確認できます。(ex. 「あ、キャラ#4302とアイテム#123がタイル[10][10]にある!」)

現在、各「タイル」は、タイルの MAP 配列内の構造です。

 struct MapTile
 {
     std::vector <int> GameObject_MapList ; //list of Objects on this map location
    TileTerrainType tileTerrainType; //GFX to display Grass, Sand, Water, Swamp, etc.
 };

 MapTile mlMap[100][100]; //map array

ただし、変数を任意に追加/削除する場合は、ベクトルを使用しないでください。配列の最初または最後の変数を削除するわけではありません。代わりに、特定の ObjectID を呼び出して、配列内のどこからでも削除する必要があります。

このため、別の容器を使用することを考えていました。疲れすぎているのかもしれませんが、どのコンテナーを使用するか、およびコンテナー内の SPECIFIC 変数を削除する方法についてアドバイスを提供できます。

たとえば、GameObject の ObjectID は「422」です。Tile[2][8] は、420、421、422、433、486、800 の整数を順番に持つコンテナーを保持します。

関数があります: RemoveGameObjectFromMap(int ObjectID); そのため、(RemoveGameObjectFromMap(422); と入力するたびに 422 を削除する必要があります。

以前は MAP コンテナーを使用していましたが、それは不要です。cplusplus.comによると、Vectorはこれには悪いでしょう。

4

2 に答える 2

0

約 10 ~ 20 個の要素を保存する場合は、ベクターを使用してください。特に POD 要素の場合。よくわかりませんstd::unordered_setが、マップは多くのメモリ割り当てを提供し、高速な挿入と消去による速度向上を食い尽くします。検索を高速化するには、ベクトルを並べ替えて、いくつかのバイナリ検索 ( lower_bound upper_bound equal_range ) を使用できます。

于 2013-09-17T08:37:19.430 に答える