我正在写一个游戏,我有一个简单的敌人AI,只跟着你,我需要敌人不要彼此重叠,所以我尝试了这个代码,但它不起作用,他们仍然在每个其他的(可能有2个人没有,我也不知道为什么)。
这是检查它们是否相交的代码
for (int i = 0; i < z.Length ; i++)
{
for (int j = 0; j < z.Length ; j++)
{
if (zombie[i].Bounds.IntersectsWith(zombie[j].Bounds) && i != j)
{
z[i].setAllowed(false);
}
else
{
z[i].setAllowed(true);
}
}
}
代码在计时器内,setAllowed告诉僵尸类天气,僵尸可以移动。
答案 0 :(得分:1)
你的&#34;允许&#34;循环期间正在覆盖值。例如:
(1)i == 2
,j == 1
=&gt;让我们说SetAllowed(false)
被执行(碰撞,预期的行为)
(2)(下一次迭代)i == 2
,j == 2
=&gt; i == j
因此执行SetAllowed(true)
(覆盖正确的行为)
(3)即使i != j
,您也可以覆盖&#34;允许&#34;当下一个僵尸没有碰撞时的值。
尝试类似的东西:
for (int i = 0; i < z.Length ; i++)
{
bool allowed = true;
for (int j = 0; j < z.Length ; j++)
{
if (i == j)
continue;
if (zombie[i].Bounds.IntersectsWith(zombie[j].Bounds))
{
allowed = false;
break;
}
}
z[i].setAllowed(allowed);
}
当然,逻辑中的其他地方可能存在其他问题,但这是从您提供的代码开始。