列表XNA中事物之间的冲突

本文关键字:之间 冲突 XNA 列表 | 更新日期: 2023-09-27 17:50:25

我正在制作一款僵尸生存游戏,我使用类和列表来创建玩家子弹和僵尸,但我不知道如何检查它们之间的碰撞。僵尸和子弹都是使用类创建的。

声明列表

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

Running in update

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--;
            }
        }

列表XNA中事物之间的冲突

在最简单的情况下,如果您想查看两个矩形是否相互碰撞,您可以使用

矩形。相交

所以就在所有的子弹和僵尸之间循环,看看它们是否有交集。这是一个碰撞

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

您需要检查子弹矩形是否相互碰撞。
参见: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
        }
    }
}