上下文:我正在使用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的应用。现在,我只是一艘在屏幕中心旋转并指向触摸点的船。
答案 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
属性将其添加到您的精灵节点。