Я пытаюсь создать сценарий, в котором есть радиальное гравитационное поле. В этой сцене также есть объект, построенный двумя физическими телами с разной массой.Повернуть объект под действием силы тяжести
Когда я запускаю этот код, лучевое гравитационное поле создается правильно, а тело переходит в центр тяжести. Я ожидаю, что тело вращается тоже, потому что голова тяжелее хвоста, но этого не происходит.
Почему?
class GameScene: SKScene {
let object = SKSpriteNode(imageNamed: "myobj")
let myCategory : UInt32 = 0x1 << 0
override func didMove(to view: SKView) {
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
let gravityCenter = SKFieldNode.radialGravityField()
gravityCenter.isEnabled = true
gravityCenter.position = CGPoint(x: size.width, y: size.height * 0.5)
gravityCenter.strength = 0.5
addChild(gravityCenter)
object.position = CGPoint(x: size.width * 0.1, y: size.height * 0.9)
object.scale(to: CGSize(width: 100, height: 25))
let head = SKPhysicsBody(circleOfRadius: object.size.width/5, center: CGPoint(x: object.size.width/2, y: 0))
let tail = SKPhysicsBody(circleOfRadius: object.size.width/50, center: CGPoint(x: -object.size.width/2, y: 0))
head.mass = 500
head.categoryBitMask = myCategory
head.allowsRotation = true
head.isDynamic = true
head.angularDamping = 0
head.affectedByGravity = true
tail.mass = 2
tail.categoryBitMask = myCategory
tail.allowsRotation = true
tail.isDynamic = true
tail.angularDamping = 0
tail.affectedByGravity = true
object.physicsBody = SKPhysicsBody(bodies: [head, tail])
object.physicsBody?.categoryBitMask = myCategory
object.physicsBody?.allowsRotation = true
object.physicsBody?.isDynamic = true
object.physicsBody?.angularDamping = 0
object.physicsBody?.affectedByGravity = true
addChild(object)
}
}
Да, но могу ли я установить трение в поле силы тяжести? При трении более тяжелое физическое тело должно достигнуть центра перед другим. – allevo
Не похоже, что вы можете сделать это с помощью SKPhysicsField. Скажем, вот идея: почему бы вам не создать другое поле радиальной гравитации и установить свою силу на небольшое отрицательное значение, чтобы оно отталкивало, а затем применило его только к хвосту? Это заставит хвост вращаться от центра. – Bob