SpriteKit - 带有 BezierPath 的进度条
SpriteKit - Progress bar with BezierPath
我使用以下函数创建路径:
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)
}
看起来有点像这样:
如何做一个进度条,从中间到外面沿着这条曲线走
因此,如果游戏进度为 100%,我会再添加 2 个 BezierPaths。一个从中间开始并到达起点(带有一个新的控制点)。另一个从中间开始并到达端点(使用新的控制点)。这里没问题。
但是我如何根据进度添加新的 Start/Endpoints - 例如,如果游戏进度为 50%,我的起点和终点离中间不远 - 我需要新的起点和曲线的端点。这是我的问题。
如何获得新的start/endpoint曲线?
谢谢!
您需要知道特定的点数来自特定的百分比。
你可以试试这个算法:
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)
我使用以下函数创建路径:
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)
}
看起来有点像这样:
如何做一个进度条,从中间到外面沿着这条曲线走
因此,如果游戏进度为 100%,我会再添加 2 个 BezierPaths。一个从中间开始并到达起点(带有一个新的控制点)。另一个从中间开始并到达端点(使用新的控制点)。这里没问题。
但是我如何根据进度添加新的 Start/Endpoints - 例如,如果游戏进度为 50%,我的起点和终点离中间不远 - 我需要新的起点和曲线的端点。这是我的问题。
如何获得新的start/endpoint曲线?
谢谢!
您需要知道特定的点数来自特定的百分比。
你可以试试这个算法:
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)