SpriteKit - BezierPath的进度条

时间:2016-07-03 19:26:34

标签: ios swift path sprite-kit bezier

我使用以下功能来创建路径:

func CreatePath(){
    let startpoint = CGPoint(x: self.frame.size.width / 6.8966, y: self.frame.size.height*0.5)
    let endpoint = CGPoint(x: self.frame.size.width - startpoint.x, y: self.frame.size.height*0.5)
    let controlpoint = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height)
    curve.moveToPoint(startpoint)
    curve.addQuadCurveToPoint(endpoint, controlPoint: controlpoint)
}

看起来有点像这样: My Path

我如何制作一个进度条,从中间到外部跟随此曲线。

因此,如果游戏进度为100%,我会增加2个BezierPaths。一个从中间开始并进入Startpoint(使用新的Controllpoint)。另一个从中间开始并进入端点(使用新的Controllpoint)。这里没问题。

但是我怎么能根据进度添加新的开始/结束点 - 例如,如果游戏中的进度是50%我的开始和端点距离中间还不远 - 我需要新的开始和终点为曲线。这是我的问题。

我怎样才能获得曲线的新起点/终点?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要知道特定百分比的特定点。

您可以尝试此算法:

func quadBezierForPercent(t:Float, startPoint:Float, controlPoint:Float, endPoint:Float) ->Float {
    let mutablet = (1.0-t)
    let mutablett = mutablet*2
    let tt = t*2

    let start = startPoint * mutablett
    let middle = 2.0 * controlPoint * mutablet * t
    let end = endPoint * tt

    return start + middle + end
}

<强>用法

let percentage = 25.0
let xPos = quadBezierForPercent(percentage, startpoint.x,controlPoint.x,endPoint.x)
let yPos = quadBezierForPercent(percentage, startpoint.y,controlPoint.y,endPoint.y)
let point = CGPointMake(xPos,yPos)