SKAction抛物线运动

时间:2014-09-16 00:58:33

标签: ios swift sprite-kit

您好我在Sprite Kit工作,我试图让精灵从一个点移动到另一个点。目前,我可以使用SkAction.moveTo执行此操作,并且精灵以直线移动。但是,我很好奇精灵是否有可能在抛物线到达目的地时以抛物线而不是直线移动。感谢所有帮助。

2 个答案:

答案 0 :(得分:7)

以下是创建抛物线UIBezierPath的简单方法:

let path = UIBezierPath()
path.moveToPoint(CGPointZero)
path.addQuadCurveToPoint(CGPoint(x: 100, y: 0), controlPoint: CGPoint(x: 50, y: 200))

在Playground中绘制时看起来像这样:

enter image description here

要使用此路径移动精灵,请使用以下代码:

mySprite.runAction(SKAction.followPath(path.CGPath, duration: 1.0))

要微调抛物线,请更改上面代码中的常量以更改路径。

答案 1 :(得分:0)

我已经在这个问题上画了很长时间。我想分享一下我在SKAction中关于抛物线运动的经验。

这是 Swift 3

的代码
let path = UIBezierPath()
path.move(to: CGPoint(x:0, y:0))
path.addQuadCurve(to: CGPoint(x: 100, y: 0), controlPoint: CGPoint(x: 50, y: 200))

let parabolaAction = SKAction.follow(path.cgPath, duration: 1)

您的精灵节点必须放在某个位置。

第二行表示Sprite Node将移动x:0和y:0。这是一次相对运动。我挣扎的问题是考虑到Point是新的绝对位置。但事实并非如此。

第三行表示在控制点的帮助下,Sprite Node将以x:100,y:0移动到新位置。控制点是顶部坐标,就像 erdekhayser 所显示的那样。

如果在Sprite Node位置+特定值的路径中设置点,那么您的Sprite Node可能位于场景之外。

希望这有助于理解UIBezierPath的抛物线运动。