【发布时间】:2023-03-05 22:45:01
【问题描述】:
我的场景中有几个节点可以旋转和拖动。我已经设置了一个physicsWorld 委托,将类型为kinematic 的physicsBody 添加到我的节点并检查physicsWorld didBeginContact - 到目前为止一切正常,当我移动节点时,接触开始/结束触发。
我试图处理这个问题的方法是设置一个 bool var,一旦联系人开始阻止进一步移动,它就会变为 true,但我遇到了一些情况(特别是如果我将节点拖得太快),那该节点在另一个对象内部有点。
我应该使用不同的方法吗?我真的不想要碰撞,只是让另一个节点“稳定”地行动,即使在高速接触时也不允许交叉。
编辑:
一些示例图像以进一步阐明问题:
为简单起见,我只添加了 2 个节点来演示该问题。第一个图像是初始位置,第二个和第三个(侧视图)是在一个非常快速的向右平移之后。只有在节点已经相交后才会触发接触检测。
我尝试过的一种方法是在触发接触之前抓取最后一个位置,并在检测到接触后重置节点位置,但结果非常不稳定且不稳定,有时您有时会看到之前的对象相交跳到最后一个“好”的位置。我觉得必须有一些更简单的方法来实现这一点,但是在花费数小时浏览可用资源之后,我无法弄清楚。
编辑 2
进一步的研究指出了扫描测试的路线,从技术上讲,如果我可以在移动节点之前检测到可能的碰撞,我应该能够在交叉发生之前限制移动停止
更新:另一个死胡同,正如 Xcode 指出的那样
Error: convexSweep only works with convex shapes
【问题讨论】: