我做了一個瓦片貼圖類,它只包含獲取或設置貼圖的數據和方法。 現在我遇到了這個問題,我想製作一個瓷磚地圖渲染器。 但我不太快,它調用方法GetTile(int layerIndex,int x,int y);迭代拋出瓦片並繪製它們。 所以我想給出所有數據全部數組的可能性。 在這種情況下tiledMapData。 但問題是,我希望有人不能改變數組的值,因爲我想讓事件改變瓷磚的物理。 我如何做到這一點。C#只讀多維數組和瓦片圖
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;
}
}
而且一般,你會如何設計一個tilemap的100×100瓦16個圖形和破壞能/建造能夠瓷磚,如何處理物理玩家互動等....? 也許有人知道好的教程(語言並不重要)
謝謝你幫助我:)
你可以簡單地複製數據並返回重複? –
你可以使用jaggard數組http://msdn.microsoft.com/en-us/library/2s05feca.aspx – Thanigainathan
由於在撤銷的答案中指出了@toATwork的數組優化,我猜這個直接訪問是最高性能的。我猜測(沒有測試)即使是多維的ReadOnlyCollection也不能與純粹的aray性能相匹配。 – ZoolWay