我有一個瓷磚列表。每個瓦片包含一個Vector2和一個紋理。簡單的瓷磚類。C#XNA移除瓷磚組
List<Tile>tiles = new List<Tile>();
如果我在羣磚的中心單擊,說一個網格,是10×10,我怎麼能去除瓷磚在某些×2區域。或者我如何根據他們的位置來操作已經添加到列表中的圖塊?有沒有比每個週期遍歷它們更容易的方法,並將位置匹配到瓷磚?
對不起,如果這是一個令人困惑的問題。我不知道該怎麼說。
我有一個瓷磚列表。每個瓦片包含一個Vector2和一個紋理。簡單的瓷磚類。C#XNA移除瓷磚組
List<Tile>tiles = new List<Tile>();
如果我在羣磚的中心單擊,說一個網格,是10×10,我怎麼能去除瓷磚在某些×2區域。或者我如何根據他們的位置來操作已經添加到列表中的圖塊?有沒有比每個週期遍歷它們更容易的方法,並將位置匹配到瓷磚?
對不起,如果這是一個令人困惑的問題。我不知道該怎麼說。
您必須循環才能找到您選擇的拼塊,然後當您發現它們設置了像「RemoveThis = true」之類的標誌時。一種解決方案是使用Vector2D.Distance
,因此您可以比較每個圖塊與您點擊的位置之間的距離。
有很多不同的算法,但看起來你需要切比雪夫距離方法:http://en.wikipedia.org/wiki/Chebyshev_distance
然後你就可以刪除所有這些磚:tiles.removeAll(function(c) c.RemoveThis)
什麼你可能希望做的是有一個更容易方式來操縱你的數據。在這裏使用列表並不是更好的方法。
我會建議使用數組來代替。例如:
//Init 10x10 tile array
int Width = 10;
int Height = 10;
Tile[] Tiles = new Tile[Width, Height];
要添加項目到這個集合,你會怎麼做:
for (int x = 0; x < Width; x++)
for (int y = 0; y < Height; y++)
Tiles[x, y] = new Tile();
然後刪除一組用於連接磚,它是那樣簡單:
void DeleteTiles(int x, int y)
{
Tiles[x, y] = null;
Tiles[(x+1) % Width, y] = null;
Tiles[x, (y+1) % Height] = null;
Tiles[(x+1) % Width, (y+1) % Height] = null;
}