Центр масс не может быть удален, это точно. Проблема в том, что вы хотите, чтобы ваше физическое тело обладало неравномерной плотностью. Плотность тела жесткой физики однородна повсюду. Я не вижу способа сделать это, кроме изменения самого физического тела (т. Е. Изменения размера/формы тела физики).
Даже если вы попытаетесь создать физическое тело из объединения нескольких физических тел с использованием 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))
}
}
Однако это не будет фиксировать специальный случай, когда окружность земли идеально центрирована. Вы видите, что я применяю импульс для временного решения проблемы в приведенном выше коде. Лучшим решением является проверка этого специального случая в методе обновления.
Примечание МФП был отрезан немного на дне.
Если вы установите 'skView.showsPhysics = true' в контроллере вида, вы увидите схему физических тел в сцене. Это полезно для отладки проблем физического тела. Также вы изменили опорную точку спрайта? – 0x141E
@ 0x141E форма тела не является проблемой. Тело прекрасно окружает картину, которую я использую; однако, когда картина приземляется на землю, она балансирует на своей стороне, а не там, где должна находиться основная масса. – Kendel