【发布时间】:2014-02-10 13:57:53
【问题描述】:
我制作了一个瓦片地图类,它只包含获取或设置瓦片的数据和方法。 现在我有一个问题,我想制作一个瓦片地图渲染器。 但我认为调用方法 GetTile(int layerIndex, int x, int y); 并不是很快。迭代扔瓷砖并绘制它们。 所以我想提供获得包含所有数据的完整数组的可能性。 在这种情况下,tiledMapData。 但问题是,我希望有人不能更改数组的值,因为我想为更改物理图块创建事件。 我该怎么做。
public class TiledMap
{
public int LayerCount
{
get;
private set;
}
public int TileCountX
{
get;
private set;
}
public int TileCountY
{
get;
private set;
}
public int TotalTileCount
{
get;
private set;
}
private int[,] tiledMapData;
public TiledMap(int layerCount, int tileCountX, int tileCountY)
{
LayerCount = layerCount;
TileCountX = tileCountX;
TileCountY = tileCountY;
TotalTileCount = TileCountX * TileCountY;
tiledMapData = new int[LayerCount, TotalTileCount];
for (int layerIndex = 0; layerIndex < TotalTileCount; layerIndex++)
{
for (int tileIndex = 0; tileIndex < TotalTileCount; tileIndex++)
{
tiledMapData[layerIndex, tileIndex] = 0;
}
}
}
public int GetTile(int layerIndex, int x, int y)
{
return tiledMapData[layerIndex, y * TileCountX + x];
}
public void SetTile(int layerIndex, int x, int y, int tileType)
{
tiledMapData[layerIndex, y * TileCountX + x] = tileType;
}
}
一般来说,你将如何设计一个 100 x 100 瓦片 16 位图形并破坏可/可建造的瓦片,如何处理物理玩家交互等等......? 也许有人知道好的教程(语言不重要)
谢谢你帮助我:)
【问题讨论】:
-
您能简单地复制数据并返回该副本吗?
-
你可以使用jaggard数组msdn.microsoft.com/en-us/library/2s05feca.aspx
-
由于@toATwork 在我撤销的答案中指出的数组优化,我猜这种直接访问是最高效的。我猜(未经测试)每种 ReadOnlyCollection 即使是多维的也无法与纯数组性能相匹配。