2016-07-03 16 views
1

i-Funktion verwenden nach einem Pfad zu erstellen:SpriteKit - Fortschrittsbalken mit 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) 
} 

Es sieht ein bisschen wie folgt: My Path

Wie könnte ich einen Fortschrittsbalken zu machen, die diese Kurve folgt von der Mitte nach außen.

Also wenn der Fortschritt im Spiel 100% ist, würde ich 2 weitere BezierPaths hinzufügen. Eine, die in der Mitte beginnt und zum Startpunkt geht (mit einem neuen Kontrollpunkt). Und der andere beginnt in der Mitte und geht bis zum Endpunkt (mit einem neuen Kontrollpunkt). Kein Problem hier.

Aber wie könnte ich neue Start/Endpunkte je nach Fortschritt hinzufügen - zum Beispiel, wenn der Fortschritt im Spiel 50% ist mein Start und Endpunkt sind nicht so weit weg von der Mitte - ich brauche neue Start- und Endpunkte für die Kurve. Hier ist mein Problem.

Wie könnte ich den neuen Start/Endpunkt der Kurve bekommen?

Danke!

Antwort

1

Sie müssen wissen, dass ein bestimmter Punkt von einem bestimmten Prozentsatz ausgeht.

können Sie diesen Algorithmus versuchen:

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 
} 

Nutzungs:

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) 
+0

Danke, das ist, was ich suchte. :-) – aignetti