列表中的碰撞检测

时间:2012-10-31 19:24:44

标签: c# list xna collision

我有一个sprite管理类和另外两个类,一个是玩家类,另一个是敌人类。两者都是我的精灵经理的子类。我已经想出如何对玩家和敌人类进行碰撞检测。但是,由于我的敌人在列表中被实例化,我无法弄清楚如何在敌人相互碰撞时检查敌人的碰撞检测。我想过要复制我的列表,但是如何正确地更新它们呢?我看到了为两个列表创建嵌套的foreach循环然后比较对象的示例,但我不确定这是否正确。有没有一种简单的方法来比较列表中的两个项目?

1 个答案:

答案 0 :(得分:6)

简而言之,是的。考虑一旦你将敌人与其他敌人进行比较,就不再需要进行比较了。您可以通过这种方式最小化检查次数

示例(伪代码):

for (int i=0; i < list.length; i++){
    // compare list[i] to everything subsequent enemy
    // we don't have to compare to enemies < i, because we've already
    // compared those to all other enemies
    for (int j=i+1; j < list.length; j++){
        checkcollision(list[i], list[j])
    }
}

只是一个注释 - 不要试图从这些循环中的列表中删除敌人,因为你不想在迭代时更改列表的状态(foreach实际上会抛出一个如果您在迭代时尝试修改列表,则会出现异常)。相反,将其保存在另一个列表中反向迭代。