単純な配列 World[100][100] を使用して作成された 2D タイル ベースの世界があります。
私はゲームをマルチプレイヤーにする予定なので、サーバーがプレイヤーを囲むすべてのタイルをクライアントに送信し、クライアントが必要とする情報のみを送信するのが良いと思います: どのテクスチャ/スプライトをレンダリングするか、どの位置をレンダリングするかそれ。
これを行うには、tileType (Grass、Sand、Water など) を持ち、10 個の TileObject の配列を保持する独自の TILE クラスを作成するとよいと思います。TileObject は、次の 3 つの変数を保持するクラスです: objectType (それはキャラクターですか? アイテムですか? 木ですか? 岩ですか?)、int objectID (オブジェクトが実際に何であれリンクされているため、キャラクターが「Leeroy Jenkins "そして、レンダリングのために Leeroy のアニメーションと方向を CLIENT に送信できます。) と objectPosition (タイルからの X & Y。必要に応じてタイルを超えて拡張できます。)
これを使用して、1 つのタイルよりも大きいオブジェクトやキャラクター (衝突が多くのタイルを消費するドラゴンなど) をどのように処理するかはわかりませんが、最高のデザインのように思えます。
TileObjects を TILE クラスに格納するには、どのタイプのコンテナーを使用すればよいですか? 今、私は配列を持っていますが、それがパフォーマンスに良いとは思いませんか? TileObject が 0 個のタイルもあれば、5 個以上のタイルもあります。私は 10 を使用しました。
class Tile
{
private:
TileObject TileObjects[10]; //up to 10 objects on a single tile
TileTerrainType tileTerrainType; //GFX to display Grass, Sand, Water, Swamp, etc.
}
私は、ベクター、マップ、リンク リスト、配列など、まったく異なるコンテナー タイプについて論じているさまざまなチュートリアルや本を読みました。TileObjects を保存するのに最適なものがわからないだけです (そのうちのいくつかは絶えず移動する可能性があり、アイテムをドロップ/ピックアップするように破壊または追加される可能性があり、木や岩のように静止したままになる可能性があるものもあります)。