[英]C# : Multidimensional array facade?
我有以下課程:
public class Layer
{
public Tile[,] Grid; //50x50 positions filled with my own Tile struct
}
public class Level
{
public Layer[] Layers; //An array of layers in the level
public List<object> Objects; //And a couple of lists of say, characters or such in the level.
}
public class Area
{
private Level[,] _activeLevels; //3x3 array of the current level and surrounding ones.
}
我想要的是能夠打電話給我。
Area.Layers[0].Grid[112, 64];
從級別[2,1]獲取網格[12,14]中的圖塊。
更多說明:
假設一個圖層有50 x 50的位置,我希望以下內容可以解釋我想要的內容。
“如果我打電話” =>“然后我真正想要”
Area.Layers[0].Grid[0,0] => Area.Level[0,0].Layers[0].Grid[0,0]
Area.Layers[0].Grid[0,10] => Area.Level[0,0].Layers[0].Grid[0,10]
Area.Layers[0].Grid[0,49] => Area.Level[0,0].Layers[0].Grid[0,49]
Area.Layers[0].Grid[0,50] => Area.Level[0,1].Layers[0].Grid[0,0]
Area.Layers[0].Grid[0,60] => Area.Level[0,1].Layers[0].Grid[0,10]
Area.Layers[0].Grid[0,112] => Area.Level[0,2].Layers[0].Grid[0,12]
-[下一部分已經回答,見下文]-
另外,我希望能夠打電話給我。
foreach (object o in Area.Objects)
//dostuff
要從九個級別的所有對象上調用foreach。
誰能給我一些正確的方向,如何實現這一點的建議,或者簡單地將其編碼出來?
在第一個示例中不確定您想要什么,您可能需要檢查它是否正確。
您可以通過實現自己的IEnumerable遍歷1個迭代器中的所有對象:
public class Area {
private Level[,] _activeLevels; //3x3 array of the current level and surrounding ones.
IEnumerable<object> Objects {
get {
foreach (Level lvl in _activeLevels)
foreach (object o in lvl.Objects)
yield return o;
}
}
}
同一對象可以在不同級別之間共享嗎? 在這種情況下,您可能要過濾重復項。
對於Area.Layers[0].Grid[112, 64]
最好使用以下形式的Area.GetTile(0, 112, 64)
形式的方法來實現:
public Tile GetTile(int layer, int overallX, int overallY)
{
return _activeLevels[overallX / 50, overallY / 50]
.Layers[layer]
.Grid[overallX % 50, overallY % 50];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.