节点旋转不遵循手指

我试图旋转一个箭头来跟随手指的移动,但它执行奇怪。 这绝对不是跟着它。 我试图在touchesMoved做。 我试图做到这一点:

var fingerLocation = CGPoint() override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { for touch: AnyObject in touches { fingerLocation = touch.locationInNode(self) let currentOrient = arrow.position let angle = atan2(currentOrient.y - fingerLocation.y, currentOrient.x - fingerLocation.y) let rotateAction = SKAction.rotateToAngle(angle + CGFloat(M_PI*0.5), duration: 0.0) arrow.runAction(rotateAction) } } 

而且也试过这个:

 var fingerLocation = CGPoint() override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { for touch: AnyObject in touches { fingerLocation = touch.locationInNode(self) } override func update(currentTime: CFTimeInterval) { /* Called before each frame is rendered */ var radians = atan2(fingerLocation.x, fingerLocation.y) arrow.zRotation = -radians } 

我也试过SKConstraint.orientToPoint,但没有运气。 我究竟做错了什么? 类似的问题的每个答案是build议atan2,但它似乎并没有为我工作。

如果要将精灵旋转到触摸位置,应该很简单,如下所示:

  let touchLocation = touch.locationInNode(self) var dx = hero.position.x - positionInScene.x; var dy = hero.position.y - positionInScene.y ; var angle = atan2(dy,dx) + CGFloat(M_PI_2) hero.zRotation = angle 

它在我尝试时有效,所以它可以给你一个基本的想法从哪里开始。 或者我误解了你正在努力实现的目标

编辑:

目前,如果您尝试将angular度转换为angular度,您将获得的angular度范围是-90至270度。 它在这里描述为什么。 如果要在0到360的范围内使用angular度,则可以将上面的代码更改为:

  var dx = missile.position.x - positionInScene.x ; var dy = missile.position.y - positionInScene.y; var angleInRadians = atan2(dy,dx) + CGFloat(M_PI_2) if(angleInRadians < 0){ angleInRadians = angleInRadians + 2 * CGFloat(M_PI) } missile.zRotation = angleInRadians var degrees = angleInRadians < 0 ? angleInRadians * 57.29577951 + 360 : angleInRadians * 57.29577951 

这是debugging数据的结果:

在这里输入图像说明