【问题标题】:SFML Platform CollisionSFML 平台碰撞
【发布时间】:2013-08-22 14:59:22
【问题描述】:

我现在正在学习 SFML,我刚刚设法实现了一些基本的跳跃和重力。但是,我不知道如何进行碰撞,因为我还需要检测物体的哪一侧被击中。例如,如果它碰到一个物体的底部,我需要向上移动停止,如果它碰到顶部,我需要向下移动,如果它只是碰到一个侧面,我需要向左或向右移动。这些只是矩形对象,所以我不必为圆形或不自然的形状编写奇怪的程序,只需 4 个边。谢谢!

【问题讨论】:

  • 我在下面提供了一个答案。将来,将此表述为更多的问题,而不是请求。你永远不会在这里得到代码。但是,如果您尝试一些事情,我们可以指导您进行下一步。即使您的尝试很糟糕,我们也希望看到您与我们合作。完成一些工作后,发布另一个(更具体的)问题。

标签: c++ collision sfml gravity direction


【解决方案1】:

有许多不同的方法可以做到这一点,有些方法比其他方法更复杂(和高效)。为了您的缘故,我会先在您的角色周围放置一个“边界框”。这个边界框将移动到您的角色所经过的任何地方,并且应该围绕他或她。每当此边界框与实体对象相交时,就会发生碰撞。

这就是乐趣所在:

  1. “相交”是什么意思?很多东西。您可以编写一个函数来确定两个形状是否相交,或者使用 SFML 中的函数,或者使用某种物理库(如 Box2D)。
  2. 如何阻止角色通过?找出它们相交的距离(在移动角色之前检查碰撞),然后让角色只移动到该实体对象的边界。

这是一个极其简化的解释。碰撞检测和处理很困难。您最好的选择是花费大量时间检测碰撞,然后担心如何处理碰撞。许多初学者同时尝试这些并感到沮丧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2018-09-18
    • 2017-07-25
    相关资源
    最近更新 更多