SKPhysicsBody更改质心

3

我目前正在开发一个游戏,其中有一张圆柱形物体的图片,我使用以下代码创建了一个SKPhysicsBody:

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

这种方法可以在节点周围创建一个漂亮的形状,但是重心很偏离...它平衡在椭圆的顶端。是否有任何方式可以改变它的平衡点,使它在理论上应该最重的部分平衡?谢谢!


1
如果您在视图控制器中设置 skView.showsPhysics = true,则会在场景中看到物理体的轮廓。这对于调试物理体问题非常有用。另外,您是否更改了精灵的锚点? - 0x141E
2
@0x141E,身体的形状不是问题。身体完美地包围了我使用的图片;然而,当图片落在地上时,它会倾斜在一侧,而不是应该有大部分质量的位置。 - Kendel
1个回答

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))
    }
}

然而,这并不能解决圆形完美居中的特殊情况。你看,我在上面的代码中应用了一个冲量来暂时解决这个问题。更好的解决方案是在更新方法中检查这种特殊情况。
请注意,gif 在底部被切掉了一点。enter image description here

我将尝试添加一个联合主体。谢谢你的想法! - Kendel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接