两个矩形在我认为应该不相交的时候

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个矩形在我认为应该不相交的时候相关的知识,希望对你有一定的参考价值。

我有一个敌人矩形

public void Update(GameTime gameTime)
{
  enemyRectangle = new Rectangle((int)enemyPosition.X, (int)enemyPosition.Y, enemyTexture.Width, enemyTexture.Height);
 ...

我有一个foreach循环,遍历一个矩形列表和一个检查这两个矩形是否相交的方法,该方法将返回一个布尔值。

foreach (Bounds bounds in bounds.boundsList)
{
  if (bounds.EnemyWallIntersects(testEnemy.enemyRectangle, bounds.CurrentRectangle))
   {
     testEnemy.isEnemyCurrentlyColliding = true;
   }
   testEnemy.isEnemyCurrentlyColliding = false;
 }          

我确定这些矩形应该相交,但是我不知道现在正在发生什么。我已经使用了一个断点,并且该矩形旨在与到达与敌人矩形相同的X和Y的点相交。

这是“ EnemyWallIntersects”方法。

 public bool EnemyWallIntersects(Rectangle rect1, Rectangle rect2)
 {
   if (rect1.Intersects(rect2))
   {
     return true;
   }
   else
     return false;
 }
答案

您的testEnemy.isEnemyCurrentlyColliding = false;在设置testEnemy.isEnemyCurrentlyColliding = true;之后立即发生,没有其他语句,因此它将始终设置为false。

此外,请记住,这是一个foreach循环,因此列表中的下一项将再次覆盖testEnemy.isEnemyCurrentlyColliding。如果只需要检查其中一项结果是否为真,则建议使用break,它将结束当前的foreach循环。

例如:

foreach (Bounds bounds in bounds.boundsList)
    {
        if (bounds.EnemyWallIntersects(testEnemy.enemyRectangle, bounds.CurrentRectangle))
        {
            testEnemy.isEnemyCurrentlyColliding = true;
            break;
        }
        else
        {
            testEnemy.isEnemyCurrentlyColliding = false;
        }
    }         

以上是关于两个矩形在我认为应该不相交的时候的主要内容,如果未能解决你的问题,请参考以下文章

如何判断两个矩形相交

两个矩形相交

使用Python判断线段是不是与矩形相交

判断两个矩形相交以及求出相交的区域

用 Python 相交矩形

两个矩形相交问题-判断是否相交