我正在尝试将两个SKNodes
连接在一起,它们都具有相同大小的圆形物理体。它们被定位成彼此接触,我希望它们被锁定在一起。从文档中,听起来我想要SKPhysicsJointFixed
,我尝试创建一个锚点是两个节点之间的中点 - 像这样:
let fixedJoint = SKPhysicsJointFixed.joint(withBodyA: atom1.physicsBody!, bodyB: atom2.physicsBody!, anchor:midPoint)
但是这会导致奇怪的行为,在关节形成后,顶部节点通过底部节点落下 - 在关节存在之前,物理实体彼此相对。
如果我使用pin接头而不是相同的代码 - 它按预期工作,即:
let pinJoint = SKPhysicsJointPin.joint(withBodyA: atom1.physicsBody!, bodyB: atom2.physicsBody!, anchor:midPoint)
按我希望的那样将身体锁定在一起。我想这是一个非常好的解决方案 - 但我对发生的事情感到困惑。为什么我的针接头做了我认为固定关节会做的事情,为什么固定关节没有做我想的那样?
答案 0 :(得分:2)
也许你遇到了我遇到的同样问题。我发现如果您加入的两个节点中的SKPhysicsJointFixed
属性不同,SKNode.zRotation
表现得非常奇怪。这是我试图获得的行为,当碰撞时某些类型的节点粘在一起。注意碰撞后它们如何围绕它们的共同质心旋转。
但我经常会遇到这类事情,而且往往比这更奇怪。请注意,它不仅不会按预期旋转,而是在接近墙壁时开始摆动。
如您所见,两种情况之间的区别在于zRotation
在第一种情况下是相等的,在第二种情况下是不相等的。如果你问我,看起来像SpriteKit中的一个错误。
一种解决方法只是在创建关节之前明确设置两个zRotation
s,但这对我来说是不可接受的。幸运的是,正如您已经发现的那样,您可以始终从SKPhysicsJointPin
获得预期的行为。当然,如果您希望针脚关节的行为类似于固定关节,则必须将关节的shouldEnableLimits
属性设置为true
。