我正在使用基於tilebased的地圖在客戶端 - 服務器遊戲上工作。 如果用戶更改地圖的可見部分(即以任何方向滾動),我向服務器查詢有關給出X,Y,寬度和高度的新部分的信息。C#:複製二維數組的部分
的地圖信息被存儲爲2D陣列
MapTile[,]
(MapTile是一個簡單的結構)
當客戶端請求一個新的部分我想讀從地圖瓦片陣列的部分,爲我定義的方法
public MapTile[,] GetMapSection(Rectangle area)
{
[... snip validation ...]
MapTile[,] result = new MapTile[area.Width, area.Height];
for (Int32 y = 0; y < area.Height; ++y)
{
for (Int32 x = 0; x < area.Width; ++x)
{
result[x, y] = this.map[x + area.X, y + area.Y];
}
}
return result;
}
是否有更簡單(=>更易於閱讀,理解和維護,不一定更快)的方式獲得來自陣列的部分?
爲arraycopy在MS例如一個鏈接爲什麼你不讓當一個人開始遊戲遊戲加載整個地圖?我沒有看到通過多次查詢一個小矩陣而得到的結果。你有足夠的內存。 ;-) 對於你的問題:你可以組織你的數組到一維數組,然後只是arraycopy你需要的部分。 1Darray [X + Y *尺寸] = 2DArray [X] [Y]。 – InsertNickHere 2010-07-08 13:18:58
地圖在每個方向上可以有幾千個大的瓦片。我們估計10000x7500瓷磚的大小。 – dbemerlin 2010-07-08 13:24:38
將二維數組轉換爲一維數組當然是可能的,但對於像this.map [GetIndex(map,x,y)]或this.map [x +(y * dimension)]這樣的大量調用, 。不太好看。 – dbemerlin 2010-07-08 13:29:58