SKPhysics身体变化中心

我目前正在做一个有圆柱形物体的游戏,我用下面的方法制作了一个SKPhysicsBody:

self.oval.node.physicsBody = SKPhysicsBody(texture: self.oval.node.texture, size: self.oval.node.size) 

这种方法在节点周围创build了一个很好的形状,但是重心却是离开的……它在椭圆的顶端平衡。 无论如何要改变这一点,所以它在理论上最重的部分应该平衡? 谢谢!

质量的中心不能离开,这是确切的。 问题是你想要你的物理体有不均匀的密度。 一个僵硬的物理学团体的密度始终是统一的。 除了修改物理体本身(即改变物理体的大小/形状)之外,我没有看到这样做的方法。

即使你尝试使用SKPhysicsBody(bodies: [body1,body2])从多个物理体的联合创build一个物理体,密度仍然是统一的,因为Sprite Kit仍然会将其作为一个整体进行模拟。

我能想到的唯一解决scheme是使用一个接头将两个Bode融合在一起,如下所示。

 class GameScene: SKScene { override func didMoveToView(view: SKView) { let node1 = SKShapeNode(circleOfRadius: 20) node1.physicsBody = SKPhysicsBody(circleOfRadius: 20) node1.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0) let node2 = SKShapeNode(circleOfRadius: 2) node2.physicsBody = SKPhysicsBody(circleOfRadius: 1) node2.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0+19) node2.physicsBody!.mass = node1.physicsBody!.mass * 0.2 //Set body2 mass as a ratio of body1 mass. self.addChild(node1) self.addChild(node2) let joint = SKPhysicsJointFixed.jointWithBodyA(node1.physicsBody!, bodyB: node2.physicsBody!, anchor: node1.position) self.physicsWorld.addJoint(joint) self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) node1.physicsBody!.applyImpulse(CGVector(dx: -10, dy: 0)) } } 

然而,这并不能解决圆圈完美居中的特殊情况。 你看我应用冲动暂时解决上面的代码中的问题。 更好的解决scheme是在更新方法中检查这个特殊情况。

在这里输入图像说明
注意gif在底部被切断了一点。