仅在矩形物理体的一侧检测碰撞 - Swift3

Detecting collision on only one side of a rectangular physics body - Swift3

我目前正在研究 2D 无尽的跑步者,用 Swift3 编写并使用 Spritekit。

小问题:

有没有办法只检查角色矩形物理体右侧的碰撞?

更多信息:

角色运行的平台由拼图块组成,用户随着游戏的进行在其上构建。相对于背景(从右到左),角色从左到右前进。

我希望角色在与 右侧 的棋子碰撞时自动跳跃。然而,玩家放在他右边的任何棋子(与角色相同的 Y 值)与他下面的棋子相同 class。

所以检查角色和他右边的棋子之间的碰撞并让他跳跃的相同代码也会让他跳跃,只要游戏检测到角色和他下面的棋子之间的碰撞。

我没能找到另一个像我这样的问题,因为通常其他人的角色会与地面上不同 class 的物体发生碰撞 class。

谢谢!

P.S。我试图使我的角色成为具有两个物理体的 SKSpriteNode,但我找不到任何有用的文档。如果有帮助的话,我的角色也会执行循环 运行 动画——尽管我无法想象这会造成任何伤害。

您是否尝试过将一个不可见的子节点(例如 feetNode)添加到角色的精灵节点,并为该子节点提供用于地板接触的物理体(class)?

根据您的其他逻辑,它可能允许您使用不同的物理机制class,因为您的角色在碰撞检测方面具有更大的灵活性。

事实上,您可以将这种方法与角色精灵节点中的多个子节点一起使用,并根据击中角色的情况为角色设置多种碰撞行为。

您可以通过检测与矩形的碰撞然后确定碰撞是否与您感兴趣的一侧来实现。这是关于如何做到这一点的 discussion。祝你好运!

一旦获得了碰撞的 2 个物体的接触点,通过检查类别掩码确定哪个 body 是碰撞的物体,然后检查其 CGPoints x 位置。可以将此 x 位置与另一个 body 的 x 位置进行比较,以准确了解它从哪一侧发生碰撞。

如果BodyA的x位置>BodyB的x位置,BodyA在右边,否则在左边。

就这么简单。 希望这对您有所帮助!