シンプルな3Dゲームマップ(minecraft)の選択チャンクを変更するプログラムをコーディングしています。マップはtheoretically very largeになる可能性がありますので、マップ全体を読み込むことは問題になりません。私は各16x16サイズのチャンクを一度ロードして、それらを再度修正する必要がある場合は、そのチャンクをメモリに保存します。私はこれらの部分を(x、y)座標の方法でメモリに格納するためのデータ構造が必要ですが、必要に応じてこのデータ構造のサイズを変更することができ、特定のチャンクを見つけることができます。 私は自分の要求を満たすためにどのようなデータ構造を使うことができないのか分からない。私は誰かが何か提案をすることを望んでいる。私はC#でコーディングしています。xy座標系のサイズ変更可能なデータ型が必要
1
A
答えて
4
Coordinate
に基づくインデクサーを持つトップレベルのMap
データ構造をお勧めします。次に、ミニマップのようなデータ構造をChunk
に追加します。 Map
インデクサのアクセサで、座標を含むチャンクがロードされているかどうか、ロードされていない場合はチェックします。その後、インデクサChunk
インデクサにMap
インデクサを委任します。 Map
は、Dictionary
を使用して読み込まれたチャンクを追跡できます。最後に、戦略に基づいてチャンクをアンロードする必要があります。最も最近使用されたもの。
このインフラストラクチャを使用すると、Map
を仮想無限平面として使用できます。
は、ここであなたが始めるためにいくつかの(未テスト)擬似コードです:
public struct Coordinate : IEquatable<Coordinate>
{
public int X { get; set; }
public int Y { get; set; }
public bool Equals(Coordinate other)
{
return X == other.X && Y == other.Y;
}
public override int GetHashCode()
{
return X^Y;
}
}
public class Data
{
// Map data goes here.
}
public class Chunk
{
public Coordinate Origin { get; set; }
public Data[,] Data { get; set; }
public Data this[Coordinate coord]
{
get { return Data[coord.X - Origin.X, coord.Y - Origin.Y]; }
set { Data[coord.X - Origin.X, coord.Y - Origin.Y] = value; }
}
}
public class Map
{
private Dictionary<Coordinate, Chunk> map = new Dictionary<Coordinate,Chunk>();
public Data this[Coordinate coord]
{
get
{
Chunk chunk = LoadChunk(coord);
return chunk[coord];
}
set
{
Chunk chunk = LoadChunk(coord);
chunk[coord] = value;
}
}
private Chunk LoadChunk(Coordinate coord)
{
Coordinate origin = GetChunkOrigin(coord);
if (map.ContainsKey(origin))
{
return map[origin];
}
CheckUnloadChunks();
Chunk chunk = new Chunk { Origin = origin, Data = new Data[16, 16] };
map.Add(origin, chunk);
return chunk;
}
private void CheckUnloadChunks()
{
// Unload old chunks.
}
private Coordinate GetChunkOrigin(Coordinate coord)
{
return new Coordinate { X = coord.X/16 * 16, Y = coord.Y/16 * 16 };
}
}
を
関連する問題
- 1. イメージxy座標
- 2. UIViewのスウィフト変換座標座標系
- 3. 座標系と座標系を持つ座標系
- 4. LibGDXでの3D座標系の変更
- 5. ベクトルリファレンス座標系を変更する
- 6. MKMapkit XY座標を緯度座標に変換する
- 7. 座標系とスプライト変換
- 8. サイズ変更可能な要素を持つサイズ変更可能なjQuery UIウィジェット
- 9. ノードの座標系を変更せずに変更する
- 10. PDFBox - 座標系
- 11. コアグラフィックス座標系
- 12. Cocos2d座標系
- 13. QGridLayout座標系
- 14. サブビューのフレーム座標系をセルフビューの座標系に変換する方法
- 15. 2つの2次元座標系間の座標変換
- 16. Opencvホモグラフィでピクセルxy座標からグローバルxy座標を見つける
- 17. 直交座標系へのn球座標系
- 18. 座標系[-1、1]
- 19. VB.NETデカルト座標系
- 20. X座標系とY座標系を混在させる
- 21. Flash内のオブジェクトのXY座標をエクスポート
- 22. iframe内のキャレットのxy座標
- 23. Hadoop不変vsデータ型変更可能
- 24. PyGame座標系の原点の位置を変更する
- 25. サイズ変更可能なウィジェット
- 26. サイズ変更可能なバブルチャート
- 27. 重心座標系に変換
- 28. 関数ベースのインデックスXY座標
- 29. Spatialite Double PrecisionのXY座標を返す
- 30. Androidのセンサー座標系は変更されませんか?