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