我目前正在制作一款游戏,其中我有一个圆柱形物体的照片,我制作了一个带有以下内容的SKPhysicsBody:
self.oval.node.physicsBody = SKPhysicsBody(texture: self.oval.node.texture, size: self.oval.node.size)
此方法在节点周围创建一个漂亮的形状,然而,重心远离...它在椭圆形的尖端上平衡。无论如何要改变它,以便它在理论上最重的部分应该平衡吗?谢谢!
答案 0 :(得分:5)
质心不能离开,这是确切的。问题是你希望你的物理体具有不均匀的密度。刚性物理体的密度始终是均匀的。除了修改物理体本身(即改变物理体的大小/形状)之外,我没有看到这样做的方法。
即使您尝试使用SKPhysicsBody(bodies: [body1,body2])
从多个物理实体的联合创建物理实体,密度仍然是一致的,因为Sprite Kit仍然只将其模拟为一个体。
我能想到的唯一解决方案是使用关节将2个节点融合在一起,如下所示。
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))
}
}
然而,这并不能解决圆圈完全居中的特殊情况。您看到我在上面的代码中应用了一个暂时解决问题的冲动。更好的解决方案是在更新方法中检查这种特殊情况。