Como aplicar um impulso angular a um nó do Sprite Kit com base na velocidade do gesto de movimento
O que pretendo fazer aqui é girar um SKSpriteNode em torno de seu ponto de ancoragem e ter sua velocidade e direção correspondentes a um gesto de panorâmica. Portanto, se meu gesto de movimento giratório é no sentido horário ao redor do sprite, então o sprite gira no sentido horário.
O problema que tenho com o meu código é que ele funciona muito bem para panelas abaixo do sprite da esquerda para a direita / direita para a esquerda, mas não quando tento fazer o pan na vertical e faz com que o sprite gire da maneira errada se eu mover acima sprite.
Aqui está o que eu tenho até agora -
let windmill = SKSpriteNode(imageNamed: "Windmill")
override func didMoveToView(view: SKView) {
/* Setup gesture recognizers */
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePanGesture:")
self.view?.addGestureRecognizer(panGestureRecognizer)
windmill.physicsBody = SKPhysicsBody(circleOfRadius: windmill.size.width)
windmill.physicsBody?.affectedByGravity = false
windmill.name = "Windmill"
windmill.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2)
self.addChild(windmill)
}
func handlePanGesture(recognizer: UIPanGestureRecognizer) {
if (recognizer.state == UIGestureRecognizerState.Changed)
{
pinwheel.physicsBody?.applyAngularImpulse(recognizer.velocityInView(self.view).x)
}
}
Eu sei o motivo pelo qual não está girando com panelas verticais, pois estou apenas obtendo o valor x, então acho que preciso combiná-las de alguma forma.
Eu também tentei isso usando applyImpulse: atPoint :, mas isso resulta em todo o sprite sendo varrido.