我目前有一个布娃娃图,它由一个父节点(没有附加物理体)和许多子节点组成,每个子节点都由一个圆形体组成。这些圆圈使用SKPhysicsJointPin
每个圆圈之间的一个相互连接,如下所示:
每个SKPhysicsJointPin
都有shouldEnableLimits = true
,我目前分别为lowerAngleLimit
和使用 -0.05 和 0.05 的值upperAngleLimit
。
这很有效,并且可以防止形状过度变形,除非整个图形上下颠倒,在这种情况下,所有关节都会突然尝试收缩,如下所示:
- 另请参阅:视频
当人物完全颠倒时,关节会很快收缩。当他再次旋转回来时,所有关节都恢复正常。为什么会这样?如何保持关节的正确角度?
编辑1:
我只是尝试用 Objective-C 重写项目,以防它是由于一些奇怪的 Swift 错误造成的;事实证明,这个问题仍然在 Objective-C 中表现出来,所以我删除了 Swift 标签。
目前我最好的猜测是,当它们附着的物体在任一方向上旋转超过 180° 时,SpriteKit 会错误地计算关节相对于世界的角度,因此错误的角度被传递给底层 Box2D 关节。
我不确定我是否应该不断更新上下角度限制以匹配他们身体的世界角度,但我似乎不必这样做,因为当身体非常接近倒置时关节停止正常工作。无论如何,我会继续尝试……</p>
编辑2:
我现在相当确定问题的发生是因为 SpriteKit 正在(我猜有充分的理由)修改该zRotation
值以使其保持在 -180° 和 180° 之间。例如,如果节点顺时针旋转并达到 -180°,SpriteKit 会自动将其值回绕到 +180°。我相当有信心这种环绕会导致关节行为不正常,我只需要弄清楚如何抵消它......</p>
编辑3:
我已经上传了演示此问题的示例应用程序(包括视频),正如 Apple 最初要求的那样:Xcode Project / Video