SpriteKit:均匀圆周运动

时间:2016-09-16 15:30:57

标签: ios iphone sprite-kit sprite skspritenode

我正在尝试使用可重复使用的函数(我需要在不同的对象上使用)以圆周运动移动精灵。

第一个结果由此函数给出:

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
}

我刚刚计算了位置的差异,找到了垂直向量与位置向量的关系。这仍然“有效”,身体遵循圆周运动,但它没有给出半径和中心(它是一个较小的圆圈)。

我知道这是因为它给出了这个结果的矢量长度。

所以真正的问题是,拥有我想要的圆的半径和中心(以及角度如何变化的速度),我如何计算垂直速度,以便它给我一个具有这些属性的运动?

0 个答案:

没有答案