我正在尝试使用可重复使用的函数(我需要在不同的对象上使用)以圆周运动移动精灵。
第一个结果由此函数给出:
func circularMotion(angle: CGFloat, radius: CGFloat, center: CGPoint) -> CGPoint{
let x = radius * cos(angle) + center.x
let y = radius * sin(angle) + center.y
return CGPoint(x: x, y: y)
}
然后我像这样更新我的精灵的位置:
override func update(currentTime: NSTimeInterval) {
player.position = circularMotion(ang, radius: 200, center: CGPoint(x: size.width/2, y: size.height/2))
ang += speed
}
ang
(角度)和speed
(0.05)是两个初始化属性。
这很好用,但实际问题是我需要旋转的精灵的速度,因为它有一个PhysicBody
。
但我的方法只改变了精灵的位置。所以我决定做这样的事情:
override func update(currentTime: NSTimeInterval) {
let prevCirc = circularMotion(ang, radius: 200, center: CGPoint(x: size.width/2, y: size.height/2))
let Circ = circularMotion(ang + 0.05, radius: 200, center: CGPoint(x: size.width/2, y: size.height/2))
let v = CGVector(dx: Circ.x - prevCirc.x, dy: Circ.y - prevCirc.y )
player.physicsBody!.velocity = v
}
我刚刚计算了位置的差异,找到了垂直向量与位置向量的关系。这仍然“有效”,身体遵循圆周运动,但它没有给出半径和中心(它是一个较小的圆圈)。
我知道这是因为它给出了这个结果的矢量长度。
所以真正的问题是,拥有我想要的圆的半径和中心(以及角度如何变化的速度),我如何计算垂直速度,以便它给我一个具有这些属性的运动?