我有一个Texture2D类型的图块数组,并希望将数组中的每个图块设置为不同的颜色。
for (int i = 1; i <= columns * rows; i++)
{
m_tiles[i] = new Texture2D(m_graphicsDevice, tilewidth, tileheight);
}
它指出错误是结束}
当我试图将它设置为不为null效果时,我不明白它是如何为空。如果我永远不能将变量设置为任何东西,那么它们将永远为空。
我试过了:
Texture2D[] m_tiles = new Texture2D(m_graphicsDevice, tilewidth, tileheight)[500];
但编译器说“无法使用[]和”Microsoft.Xna.Framework.Graphics.Texture2D“类型的表达式进行索引”
答案 0 :(得分:2)
首先需要初始化一个数组实例,以便为其元素赋值:
在for
- 循环之前加上以下语句:
Texture2D[] m_tiles = new Texture2D[columns * rows + 1];
数组索引在C#中基于0,并且支持大多数.NET语言。因此,在使用索引器时,您可能希望从0 ... n-1循环,而不是1 .. n。
但老实说,我很少在.NET中使用数组。如果您没有特定的理由使用数组,我建议使用List<T>
:
List<Texture2D> m_tiles = new List<Texture2D>();
for(;;)
{
m_tiles.Add(new Texture2D(foo, bar));
}
答案 1 :(得分:1)
您需要首先实例化数组,例如:
m_tiles = new Texture2D[10];
与大多数其他类型一样,需要创建数组,更具体地说,它需要知道您希望它拥有多少个元素(在这种情况下,它有10个“插槽”)。
答案 2 :(得分:0)
您需要使用适当的维度初始化数组。
m_tiles []可能未初始化为接收(列*行)元素。
因此,在循环之前,应该使用此大小初始化m_titles数组。
Texture2D[] m_tiles = new Texture2D[columns * rows];
因此,如果您有1列和1行,它将为您提供1个插槽(m_tiles[0]
)。如果您有2列和2行,则将有4个插槽(m_tiles[0],m_tiles[1],m_tiles[2],m_tiles[3]
);
你应该以i = 0开始循环,否则,将不会分配[0]并且将触发索引超出范围的异常。如果你真的不想从0开始,你可以使用(columns * rows +1)将数组大小增加1。