我现在正在学习 SFML,我刚刚设法实现了一些基本的跳跃和重力。但是,我不知道如何进行碰撞,因为我还需要检测物体的哪一侧被击中。例如,如果它碰到一个物体的底部,我需要向上移动停止,如果它碰到顶部,我需要向下移动,如果它只是碰到一个侧面,我需要向左或向右移动。这些只是矩形对象,所以我不必为圆形或不自然的形状编写奇怪的程序,只需 4 个边。谢谢!
问问题
1670 次
1 回答
3
有许多不同的方法可以做到这一点,有些方法比其他方法更复杂(和有效)。为了您的缘故,我会先在您的角色周围放置一个“边界框”。这个边界框将移动到您的角色所经过的任何地方,并且应该围绕他或她。每当此边界框与实体对象相交时,就会发生碰撞。
这就是乐趣所在:
- “相交”是什么意思?很多东西。您可以编写一个函数来确定两个形状是否相交,或者使用 SFML 中的函数,或者使用某种物理库(如 Box2D)。
- 如何阻止角色通过?找出它们相交的距离(在移动角色之前检查碰撞),然后让角色只移动到该实体对象的边界。
这是一个极其简化的解释。碰撞检测和处理很困难。您最好的选择是花大量时间检测碰撞,然后担心如何处理碰撞。许多初学者同时尝试这些并感到沮丧。
于 2013-08-20T14:49:06.307 回答