2017-07-01 51 views
0

这是我有一段时间的问题,但从来没有打扰问。在哪里做碰撞检测

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

冲突逻辑在那里存在?

详细说明;在我的状态下,我有一个组件的列表。这些可以是NPC的,静态的物体,玩家,和刚才的一切是

private List<Component> _gameComponents; 

如果我做的球员类的检查,想必玩家将需要知道_gameComponents的名单,然后我会在更新时进行检查,以便相应地更改速度。

有没有我失踪的标准?

编辑1:我刚才读到,我应该有更新和渲染检查所有碰撞之间的一步。我会试一试,看看会发生什么。

回答

1

让每个可物理处理的组件继承自定义interface,如ICollidable

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

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

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

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