我正在使用基于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