列表XNA中的事物之间的冲突

时间:2014-03-16 14:32:21

标签: c# xna collision-detection

我正在制作一个僵尸生存游戏,我使用类和列表创建玩家子弹和僵尸,但我无法弄清楚如何检查它们之间的碰撞。 僵尸和子弹都是使用类创建的。

声明列表

    List<Bullets> bullets = new List<Bullets>();
    List<Zombies> zombies = new List<Zombies>();

在更新中运行

for (int i = 0; i < bullets.Count; i++)
        {
            bullets[i].Rectangle = new Rectangle((int)bullets[i].position.X,             (int)bullets[i].position.Y, bullets[i].texture.Width, bullets[i].texture.Height);
            if (!bullets[i].isVisible)
            {
                bullets.RemoveAt(i);
                i--;
            }

        }

提前致谢。

2 个答案:

答案 0 :(得分:0)

最简单的,如果你想看看两个矩形是否相互碰撞,你可以使用

Rectangle.Intersects

所以只需循环遍历所有子弹和所有僵尸,看看它们是否相交。你有碰撞。

当然,你可以通过减少比较来获得更好的性能,例如使用四叉树来防止需要检查年龄较大的实体的碰撞,但是两个循环会很好。

答案 1 :(得分:0)

您需要检查子弹矩形是否相互碰撞 见:Intersects

首先,你需要给你的僵尸和子弹一个矩形 (你可能想在自己创建的僵尸和子弹类中这样做)

然后进行循环,如果发生碰撞,检查列表中的项目符号。

像这样:

foreach (Zombies z in zombies)
{
    foreach (Bullets b in bullets)
    {
        if (b.rectangle.Intersects(z.rectangle))
        {           
            // so your loop can delete the bullet                   
            b.isVisible = false;
            // do something with the zombie
        }
    }
}