Как вращать SKPhysicsBody как колесо - PullRequest
0 голосов
/ 24 октября 2019

Моя цель состоит в том, чтобы вращать круговой узел, как колесо, приводимое в движение двигателем, например, при вращении по часовой стрелке колесо будет двигаться вправо из-за трения о пол.

В соответствии с другими нитями способ вращенияSKPhysicsBody - вращать тело, к которому он прикреплен.

Этот код вращает спрайт, но не физическое тело. Как мне решить эту проблему?

let circle = SKSpriteNode(imageNamed: ”circle")
circle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.9)
circle.physicsBody = SKPhysicsBody(circleOfRadius: circle.frame.width/2)
if let physics = circle.physicsBody {
    physics.affectedByGravity = true
    physics.allowsRotation = true
    physics.restitution = 0.2
    physics.friction = 1.0
    physics.isDynamic = true;
    physics.mass = 10
}
addChild(circle)
let rotateAction = SKAction.rotate(byAngle: .pi, duration: 1.0)
let repeatAction = SKAction.repeatForever(rotateAction)
circle.run(repeatAction)

PS. Этот способ создания тела не работает в iOS 13, но не должен влиять на результат.

circle.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: ”circle"), size: circle.size)

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Хотя перемещение или вращение спрайта напрямую приводит в движение физическое тело, физический движок предназначен для перемещения спрайтов, так что вам не нужно об этом беспокоиться. Философия заключается в том, чтобы позволить ему выполнять свою работу, а не добавлять действия для непосредственного создания движений.

Если вы хотите, чтобы спрайт с прикрепленным телом вращался, либо примените угловой импульс к телу (как предложеноKnight0fDragon) или просто установите угловую скорость физического тела. Вы также можете установить angularDamping в 0, если не хотите останавливать вращение. Например,

...
addChild(circle)
circle.physicsBody?.angularDamping = 0
circle.physicsBody?.angularVelocity = .pi
...

Затем удалите circle.run (...) и посмотрите, что произойдет.

0 голосов
/ 24 октября 2019

Используйте 'applyAngularImpulse', а не SKActions. Также установите для параметра «allowRotation» значение true

...