所以我正在开发一款游戏,除了游戏引擎,我还有一个for循环来检测与Panels列表中所有对象的碰撞
以下是代码:
for (int x = 1; x <= 2; x++)
{
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds))
{
MessageBox.Show("COLLIDING");
}
}
目前,列表中只添加了两个名为wall的对象
每次我去跑步它告诉我Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
我不知道该怎么做,我是否设置了if语句错误?
我只是尝试将它从for循环中取出并将x替换为0,当我触摸该对象时它说我碰撞了,所以我知道我没有设置if语句错误。
答案 0 :(得分:3)
正如您可能知道或不知道的那样,数组在索引中从0开始,因此您的数组应该是这样的。
for (int x = 0; x < 2; x++)
{
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds))
{
MessageBox.Show("COLLIDING");
}
}
答案 1 :(得分:1)
如果墙上有2个物体,则环路不需要转到x = 2
for (int x = 0; x < 2; x++)
{
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds))
{
MessageBox.Show("COLLIDING");
}
}
当数组从索引0开始
答案 2 :(得分:0)
walls[]
数组中有两个元素表示它们位于walls[0]
和walls[1]
中(因为.Net数组遵循基于0
的索引),因此{{ 1}}是出界的;因此,您应该使用walls[2]
启动循环以获取第一个元素并循环到0
。 但我强烈建议您使用2
而不是walls
2