旋转SKNode指向触摸接触点

时间:2015-04-03 18:26:21

标签: ios oop swift sprite-kit skspritenode

上下文:我正在使用Xcode,Swift和SpriteKit

我已经创建了一个单独的类文件“Ship.swift”,其中包含:

let RAD_PER_SEC: CGFloat = 0.1
var direction = 0

//Updates object value for determining how much to rotate object
func spin {

}

理想情况下,我想制作一款类似旧款游戏Astroids的应用。现在,我只是一艘在屏幕中心旋转并指向触摸点的船。

2 个答案:

答案 0 :(得分:2)

如果要将节点旋转到触摸位置,则需要知道要旋转的角度。因为在Spritekit中,角度是以弧度为单位测量的,所以必须进行一些转换:

let Pi = CGFloat(M_PI)
let DegreesToRadians = Pi / 180

之后你必须使用atan2()来计算角度......这是使用touchesMoved方法旋转精灵的简单例子:

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
        let curTouch = touches.anyObject() as UITouch
        let curPoint = curTouch.locationInNode(self)

        let deltaX = self.yourNode.position.x - curPoint.x
        let deltaY = self.yourNode.position.y - curPoint.y
        let angle = atan2(deltaY, deltaX)

        self.yourNode.zRotation = angle + 90 * DegreesToRadians

    }

答案 1 :(得分:1)

从iOS8开始,Apple添加了SKConstraint个可添加到SKNode的内容。这是文档:https://developer.apple.com/library/mac/documentation/SpriteKit/Reference/SKConstraint_Ref/index.html#//apple_ref/occ/cl/SKConstraint

在您的情况下,您需要在用户触摸屏幕时创建约束 - SKConstraint.orientToPoint(touchLocation, offset: SKRange.rangeWithConstantValue(0))

然后使用constraints属性将其添加到您的精灵节点。