Ios SpriteKit:匀速圆周运动

Ios SpriteKit:匀速圆周运动,ios,iphone,sprite-kit,sprite,skspritenode,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)

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

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

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
}
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
}
其中,
ang
(角度)和
speed
(0.05)是两个初始化属性

这很好,但实际的问题是,我需要知道精灵旋转的速度,因为它有一个
PhysicBody

不过,我的方法只改变了精灵的位置。所以我决定这样做:

override func update(currentTime: NSTimeInterval) {
player.position = circularMotion(ang, radius: 200, center: CGPoint(x: size.width/2, y: size.height/2))

ang += speed
}
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
}
我只是计算了位置的差,找到了相对于位置向量的垂直向量。这仍然“有效”,物体遵循圆周运动,但它没有给定半径和中心(它是一个较小的圆)

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


所以真正的问题是,有了我想要的圆的半径和圆心(以及角度如何变化的速度),我如何计算垂直速度,从而使我得到具有这些特性的运动?

尝试避免基于观点的问题,因此,问题要简单,只需展示您为创建轨道所做的工作,并询问如何使其工作。然后,社区将分享实现这一目标的方法,你可以选择你认为最好的方法来实现这一目标。在你让它工作之后,把它交给codereview.stackexchange.com,那里的人会给你看一看,并提供最佳实践建议。在进入椭圆轨道之前,我决定简化工作,从圆周运动开始,然后我将进入椭圆轨道。当被问到的时候,我试着展示我所做的工作。感谢您的建议@Knight0fdraContry在此处避免基于意见的问题,因此,请保持您的问题简单,只需展示您为创建轨道所做的工作,并询问如何使其工作。然后,社区将分享实现这一目标的方法,你可以选择你认为最好的方法来实现这一目标。在你让它工作之后,把它交给codereview.stackexchange.com,那里的人会给你看一看,并提供最佳实践建议。在进入椭圆轨道之前,我决定简化工作,从圆周运动开始,然后我将进入椭圆轨道。当被问到的时候,我试着展示我所做的工作。感谢您的建议@Knight0fDragon