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

本文关键字:xna 列表 最后一个 成员 | 更新日期: 2023-09-27 18:03:03

这是一个类似的问题,我张贴在这里:只有最后一个成员的列表正在更新

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

我有一个名为Collision Engine的函数,该函数假定检测列表中每个块与播放器之间的碰撞。

这是我用来检测玩家是否与任何块相交的函数(在这种情况下是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类中的switch语句的次要选项,这会解决它吗?

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

在循环的每次迭代中重写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;  
                }
        }
}