2011-10-12 105 views
1

我有一个类型为Texture2D的tile的数组,并且希望将数组中的每一个设置为不同的值。无法赋值给一个数组

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’的表达索引”

+1

如何声明'm_tiles'? – Oded

回答

2

首先,您需要为值分配给它的元素来初始化数组实例:

Preceed的for -loop用以下语句:

Texture2D[] m_tiles = new Texture2D[columns * rows + 1]; 

数组索引基于0 C#和大多数.NET语言。因此,当使用索引器时,您可能想要从0 .. n-1而不是1 .. n进行循环。

但说实话,我很少仍然在.NET中使用数组。如果没有特别原因需要使用一个数组,我会建议使用List<T>

​​
+0

它必须是'columns * rows + 1',否则会出现'IndexOutOfRangeException'。 –

+0

谢谢,这工作。我太过于复杂了。 –

+0

@Mark:你说的对,只是发现他正在从1循环到n。但我的建议保持不变,不用介意阵列:-) –

1

您需要先初始化数组,如:

m_tiles = new Texture2D[10]; 

像大多数其他类型,数组需要创造,更具体地说,它需要知道你要多少元素它具有(在这种情况下,有10个“S很多“)。

+0

谢谢,工作。我太过于复杂了。 –

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。