3

我试图将两个SKNodes都具有相同大小的圆形物理体连接在一起。它们的位置可以相互接触,我希望它们被锁定在一起。从文档中,听起来我想要一个SKPhysicsJointFixed,并且我尝试创建一个锚点是两个节点之间的中点 - 像这样:

let fixedJoint  = SKPhysicsJointFixed.joint(withBodyA: atom1.physicsBody!, bodyB: atom2.physicsBody!, anchor:midPoint)

但这会导致一种奇怪的行为,即在制作关节后,顶部节点从底部节点落下 - 在关节存在之前,物理体相互靠着。

如果我使用具有相同代码的销接头代替 - 它按预期工作,即:

let pinJoint  = SKPhysicsJointPin.joint(withBodyA: atom1.physicsBody!, bodyB: atom2.physicsBody!, anchor:midPoint)

将身体按我想要的方式锁在一起。我想这是一个非常好的解决方案 - 但我对正在发生的事情感到困惑。为什么我的销接头做我认为固定接头会做的事情,为什么固定接头不做我认为它会做的事情?

4

1 回答 1

3

也许你遇到了我遇到的同样的问题。我发现如果您要加入的两个节点中的属性不同,它的SKPhysicsJointFixed行为会非常奇怪。SKNode.zRotation这是我试图获得的行为,当某些类型的节点发生碰撞时它们会粘在一起。请注意,碰撞后,它们如何围绕共同的质心旋转。

预期的

但我经常得到这种东西,而且常常比这更奇怪。请注意,它不仅没有按预期旋转,而且在接近墙壁时开始摆动。

怪异

如您所见,这两种情况之间的区别在于,zRotation在第一种情况下 s 相等,在第二种情况下不相等。如果你问我,这似乎是 SpriteKit 中的一个错误。

一种解决方法是zRotation在创建关节之前明确设置两个 s 相等,但这对于我的目的是不可接受的。幸运的是,正如您已经发现的那样,您可以始终如一地从SKPhysicsJointPin. 当然,如果您想让销关节表现得像一个固定关节,您必须将关节的shouldEnableLimits属性设置为true

于 2017-09-12T19:53:36.273 回答