2016-07-03 1 views
1

i utiliser la fonction suivante pour créer un chemin:SpriteKit - Barre de progression avec 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) 
} 

Il ressemble un peu à ceci: My Path

Comment pourrais-je faire une barre de progression, qui suit cette courbe du milieu à l'extérieur. Donc, si la progression dans le jeu est de 100%, j'ajouterai 2 autres BezierPaths. Celui qui commence au milieu et va au point de départ (avec un nouveau point de contrôle). Et l'autre qui commence au milieu et va à l'Endpoint (avec un nouveau Controllpoint). Pas de problème ici. Mais comment puis-je ajouter de nouveaux Start/Endpoints en fonction de la progression - par exemple si la progression dans le jeu est de 50%, mon start et endpoint ne sont pas si éloignés du milieu - j'aurais besoin de nouveaux start et endpoints pour la courbe. Voici mon problème.

Comment puis-je obtenir le nouveau point de départ/d'arrivée de la courbe?

Merci!

Répondre

1

Vous devez savoir qu'un point particulier provient d'un pourcentage spécifique.

Vous pouvez cet algorithme:

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 
} 

Utilisation:

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

Merci, ce que je cherchais. :-) – aignetti