PictureBox.bounds.intersectswith似乎不起作用

时间:2015-04-05 09:44:26

标签: c# visual-studio-2010 intersection

我正在写一个游戏,我有一个简单的敌人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告诉僵尸类天气,僵尸可以移动。

1 个答案:

答案 0 :(得分:1)

你的&#34;允许&#34;循环期间正在覆盖值。例如:

(1)i == 2j == 1 =&gt;让我们说SetAllowed(false)被执行(碰撞,预期的行为)

(2)(下一次迭代)i == 2j == 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);
}

当然,逻辑中的其他地方可能存在其他问题,但这是从您提供的代码开始。