在哪里做碰撞检测

时间:2017-07-01 20:36:42

标签: c# xna monogame

这是我已经有一段时间的问题,但从来没有打扰过。

想象一下,我有两个对象。 1静态,另一个可移动(由玩家)。

那里存在碰撞逻辑?

详细说明;在我的州,我有一个组件的列表。这些可以是NPC,静态对象,玩家,以及几乎所有东西

private List<Component> _gameComponents;

如果我要在播放器课程中进行检查,那么玩家肯定需要知道 _gameComponents 列表,然后我会将检查作为我更新,所以我可以相应地改变速度。

我缺少标准吗?

编辑1:我刚刚读到我应该在更新和渲染之间有一步来检查所有冲突。我会尝试一下,看看会发生什么。

1 个答案:

答案 0 :(得分:1)

让每个可以物理处理的组件都继承自interface之类的自定义ICollidable

将每个ICollidable存储在与您的组件列表分开的List<T>中。每个ICollidable即使在第三个集合中也不是静态的。

有一个第三类只处理游戏的整个物理部分并迭代非静态列表。这样,您只能更新可以移动的内容,并且可以将其与包含每个ICollidable的列表中的每个对象进行比较。

确保仅检查移动物体范围内的物体的碰撞。检查不会碰撞的物体的碰撞是没有意义的。

我总是在更新前检查碰撞,尝试最适合你的方法。