首页 文章

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

提问于
浏览
2

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

Short question:

Is there a way to only check for collisions on the right side of my character's rectangular physics body?

More info:

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

我希望角色在与他的 right side 上的一块相撞时自动跳跃 . 但是,玩家放在他右边的任何棋子(与角色相同的Y值)都与他下面的棋子属于同一类 .

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

我一直无法找到像我这样的其他问题,因为通常其他人的角色会与地面上的不同类别的物体发生碰撞 .

谢谢!

附:我试图让我的角色成为一个带有两个物理体的SKSpriteNode,但我找不到任何有用的文档 . 如果它有帮助,我的角色也会执行循环运行动画 - 虽然我无法想象这会伤害任何东西 .

3 回答

  • 3

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

  • 1

    您是否尝试将非可见子节点(例如feetNode)添加到角色的精灵节点,并为该子节点提供物理体(类)以进行楼层接触?

    根据逻辑的其余部分,它可能允许您为角色使用不同的物理类,在碰撞检测中具有更大的灵活性 .

    事实上,您可以在角色的精灵节点中使用该方法与多个子节点,并根据击中它的内容为角色提供多种碰撞行为 .

  • 1

    一旦获得碰撞的2个物体的接触点,通过检查类别掩码确定哪个物体是碰撞的物体,然后检查其CGPoints x位置 . 可以将该x位置与另一个身体的x位置进行比较,以准确地知道它与哪个侧面发生碰撞 .

    如果身体A的x位置>身体B的x位置,身体A在右侧,如果不是,则在左侧 .

    就如此容易 . 希望这可以帮助!

相关问题