你好,我正在使用Sprite Kit进行工作,并尝试让一个精灵从一个点移动到另一个点。目前,我可以使用SkAction.moveTo实现这一点,精灵沿直线移动。然而,我想知道是否可能在精灵到达目的地时以抛物线方式移动。感谢您的帮助。
你好,我正在使用Sprite Kit进行工作,并尝试让一个精灵从一个点移动到另一个点。目前,我可以使用SkAction.moveTo实现这一点,精灵沿直线移动。然而,我想知道是否可能在精灵到达目的地时以抛物线方式移动。感谢您的帮助。
let path = UIBezierPath()
path.moveToPoint(CGPointZero)
path.addQuadCurveToPoint(CGPoint(x: 100, y: 0), controlPoint: CGPoint(x: 50, y: 200))
当在Playground中绘制时,它看起来像这样:
要使你的精灵沿着这条路径移动,请使用以下代码:
mySprite.runAction(SKAction.followPath(path.CGPath, duration: 1.0))
var controlPoint = CGPointMake((ball.position.x+location.x)/2, (ball.position.y+location.y)/2)
var ballPath = UIBezierPath()
ballPath.moveToPoint(ball.position)
ballPath.addQuadCurveToPoint(location, controlPoint: CGPointZero)
- Comrod33[SKAction followPath: duration:]
,然而最后的位置却非常大(尽管我并没有使用那么大的数值...)。 - aramusss我在这个问题上已经花了相当长的时间。我想分享一下我在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节点必须放置在特定的位置。
第二行表示Sprite节点将以x:0和y:0的方式移动。这是相对运动。我遇到困难的问题是因为考虑到点是新的绝对位置,但实际上并不是。
第三行表示Sprite节点将通过x:100,y:0的方式移动到一个新的位置,借助控制点。控制点是像erdekhayser所展示的顶部坐标。
如果你在路径中设置了Sprite节点位置+某个值的点,那么你的Sprite节点可能会超出场景范围。
希望这有助于理解UIBezierPath用于抛物线运动。