只有列表的最后一个成员才能给出Rectangle Intersect xna

时间:2015-07-17 00:39:03

标签: c# xna

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

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

我有一个名为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)。

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

如果有必要,我有一个辅助选项可以将交叉检测移动到switch类中的Blocks语句中,是否会修复它?

1 个答案:

答案 0 :(得分:1)

你在循环的每次迭代中都覆盖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;  
                }
        }
}