【问题标题】:Collision Detection Within a List列表中的碰撞检测
【发布时间】:2012-10-21 09:26:55
【问题描述】:

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

【问题讨论】:

  • 向我们展示您迄今为止尝试过的代码的相关部分。 ;)

标签: c# list xna collision


【解决方案1】:

简而言之,是的。考虑一下,一旦您将一个敌人与其他所有敌人进行比较,就不再需要进行比较。您可以通过这种方式最大限度地减少检查次数

示例(伪代码):

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 实际上会抛出异常,如果您尝试在迭代时修改列表)。相反,将其保存在另一个列表中反向迭代。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多