只有列表的最后一个成员给出矩形相交 xna

Only last member of a list gives a Rectangle Intersect xna

这与我在此处发布的问题类似:Only last made member of a list is updating

同样,我有一个玩家列表(用于多人游戏目的)和一个块列表(基本上是一个具有指定位置和矩形的纹理)。

我有一个名为 Collision Engine 的函数,应该 检测列表中每个块与玩家之间的碰撞。

这是我用来尝试检测玩家是否与 any 方块相交的函数(在本例中为 500 棵随机生成的树)。

foreach (Blocks b in main.initializer.blocklist)
{
    foreach (Player p in main.initializer.playerlist)
    {

                if (p.Hitbox.Intersects(b.box))
                {
                    p.intersection = true;
                }
                else
                {
                    p.intersection = false;
                }

    }
}

起初我以为它根本没有检测到碰撞,但后来我注意到它检测碰撞,但是它只检测到最后放置的方块列表(在将树的数量限制为 1,然后 2 之后计算出来)。

如果有人能向我解释如何解决这个问题,我们将不胜感激。

我有第二个选项,如果需要,可以将相交检测移动到 Blocks class 中的 switch 语句中,这样可以解决吗?

您将在循环的每次迭代中覆盖 p.Intersection。 不要在循环中将其设置为 false。将其设置为默认值 false,然后在检测到碰撞时将其更改为 true。

编辑:您还需要将播放器放在外环,将方块放在内环。

     foreach (Player p in main.initializer.playerlist)
     {
        p.intersection = false;

        foreach (Blocks b in main.initializer.blocklist)
        {
            if (p.Hitbox.Intersects(b.box))
                {
                p.intersection = true;
                break;  
                }
        }
}