我的XNA程序有一个while循环(最初是一个for循环,它有同样的问题,我改为允许更清晰的退出),它应该循环通过类unitTank的数组,找到第一个null条目并创建一个新对象在那个位置,像这样:
public void createBlueTank(float X, float Y)
{
Boolean done = false;
int i = 0;
while (i < blueTank.Length - 1 && done == false)
{
if (blueTank[i] == null)
{
blueTank[i] = new unitTank(0, new Vector2(X, Y), this);
done = true;
}
i++;
}
}
blueTank
的创建方法工作正常(我已经检查过),这里的问题是如果循环包含任何允许它以任何方式退出的代码,迭代中的先前代码就不会得到实现。也就是说,如果我删除done = true;
(或原始for循环中的break
),那么循环会按照预期的方式为数组blueTank中的每个空值创建一个新的unitTank
,但是如果我在第一次完成后将其更改为退出循环,则根本不会发生。
此外,我注意到,如果我在检查blueTank[i]
为空i+2
之后更改了内 em 内的所有引用(因为在测试中)环境索引0和1已定义,但2个以上不是);或者如果我将i的初始化更改为int i = 2
,则循环按预期工作。这是if语句错误地将blueTank[0]
读为null的问题,但是赋值语句没有覆盖该索引中的现有实例,然后循环在它到达真正的空索引之前被取消了吗?如果是这样,为什么会发生这种情况?
答案 0 :(得分:1)
Is this an issue with the if statement erroneously reading blueTank[0] as null, but the assignment statement not overwriting the existing instance inside that index,
我认为当时blueTank[0]
或bluetank[1]
实际上 null
是完全合理的。在调试器中放置一个断点,您应该能够看到哪些值是null
答案 1 :(得分:0)
所以只是为了排除一个简单的拼写错误...你说这个for循环不起作用?
for (var i = 0; i < blueTank.Length; i++)
{
if (blueTank[i] == null)
{
blueTank[i] = new unitTank(0, new Vector2(X, Y), this);
break;
}
}