C# 列表中的冲突检测

C# 列表中的冲突检测,c#,list,xna,collision,C#,List,Xna,Collision,我有一个精灵管理类和另外两个类,一个是玩家类,另一个是敌人类。这两个都是我的精灵管理器的子类。我已经想出了如何为玩家和敌人类进行碰撞检测。然而,由于我的敌人是在一个列表中实例化的,所以我无法弄清楚如何在敌人相撞时检查碰撞检测。我想复制我的列表,但我该如何正确地更新它们呢?我看到了一个为两个列表创建嵌套foreach循环然后比较对象的示例,但我不确定这是否正确。有没有比较列表中两个项目的简单方法?简而言之,是的。考虑一下,一旦你把敌人和其他敌人进行比较,就不再需要进行比较。您可以通过这种方式最小化

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

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

示例(伪代码):

for(int i=0;i

请注意--不要尝试在这些循环中从列表中删除敌人,因为您不想在迭代时更改列表的状态(
foreach
如果您在迭代时尝试修改列表,实际上会引发异常)。相反,请将其保存在另一个列表中,或反向迭代。

向我们展示您迄今为止尝试的代码的相关部分。;)
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])
    }
}