Swift 精灵套件中的Zig zac路径

Swift 精灵套件中的Zig zac路径,swift,sprite-kit,cgpath,Swift,Sprite Kit,Cgpath,我希望精灵套件节点向右移动200像素,向左移动400像素,然后再向右移动400像素,依此类推,直到离开屏幕 var cgpath: CGMutablePathRef = CGPathCreateMutable(); // random values var xStart: CGFloat = CGFloat(0.0); var xEnd: CGFloat = CGFloat(0.0); // ControlPoint1 var cp1X: CG

我希望精灵套件节点向右移动200像素,向左移动400像素,然后再向右移动400像素,依此类推,直到离开屏幕

    var cgpath: CGMutablePathRef = CGPathCreateMutable();

    // random values
    var xStart: CGFloat = CGFloat(0.0);
    var xEnd: CGFloat = CGFloat(0.0);

    // ControlPoint1
    var cp1X: CGFloat = CGFloat(200.0);
    var cp1Y: CGFloat = CGFloat(400.0);

    // ControlPoint2
    var cp2X: CGFloat = CGFloat(200.0);
    var cp2Y: CGFloat = CGFloat(280.0);

    var s: CGPoint = CGPointMake(xStart,-self.frame.size.height/2);
    var e: CGPoint = CGPointMake(xEnd, self.frame.size.height/2);
    var cp1: CGPoint = CGPointMake(cp1X, cp1Y);
    var cp2: CGPoint = CGPointMake(cp2X, cp2Y);
    CGPathMoveToPoint(cgpath,nil, s.x, s.y);

    CGPathAddCurveToPoint(cgpath, nil, cp1.x, cp1.y, cp2.x, cp2.y, e.x, e.y);

    var ball:SKSpriteNode = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(40, 40));

    var followTrack = SKAction.followPath(cgpath, asOffset: false, orientToPath: true, duration: 15.0);
    var forever: SKAction = SKAction.repeatActionForever(followTrack);
    ball.runAction(forever);
    self.addChild(ball);

    let shapeNode = SKShapeNode(path: cgpath)
    self.addChild(shapeNode);

尝试以下代码使用贝塞尔曲线获得之字形路径

var cgpath: CGMutablePathRef = CGPathCreateMutable();

var xStart: CGFloat = CGFloat(200.0);
var xEnd: CGFloat = CGFloat(200.0);

var yStart : CGFloat = 0
var yEnd : CGFloat = self.size.height

let numberOfIntermediatePoints  = 10
let xOffset : CGFloat = 400
let intervalY = (yEnd - yStart)/CGFloat(numberOfIntermediatePoints)

var s: CGPoint = CGPointMake(xStart,yStart);
CGPathMoveToPoint(cgpath,nil, s.x, s.y);


for i in stride(from: 0, through: numberOfIntermediatePoints - 1, by: 1) {

    let yOff = intervalY * CGFloat(i) + yStart
    let controlPointInterval = intervalY/3

    var cp1X: CGFloat = CGFloat(xStart + xOffset);
    var cp1Y: CGFloat = CGFloat(yStart + yOff + controlPointInterval);

    var cp2X: CGFloat = CGFloat(xStart - xOffset);
    var cp2Y: CGFloat = CGFloat(yStart + yOff + controlPointInterval * 2);

    var e: CGPoint = CGPointMake(xEnd, yStart + yOff + intervalY);
    var cp1: CGPoint = CGPointMake(cp1X, cp1Y);
    var cp2: CGPoint = CGPointMake(cp2X, cp2Y);

    CGPathAddCurveToPoint(cgpath, nil, cp1.x, cp1.y, cp2.x, cp2.y, e.x, e.y);

}

var ball:SKSpriteNode = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(40, 40));

var followTrack = SKAction.followPath(cgpath, asOffset: false, orientToPath: true, duration: 5.0);
var forever: SKAction = SKAction.repeatActionForever(followTrack);
ball.runAction(forever);
self.addChild(ball);

let shapeNode = SKShapeNode(path: cgpath)
self.addChild(shapeNode);

更改
numberOfIntermediatePoints
xOffset
值以更改锯齿形的数量和在每个锯齿形中移动的距离。

解释代码当前的功能和错误。当前代码会形成一条奇怪的曲线,我想要一条zig-zac曲线-我想要的是
CGPathAddLineToPoint
而不是
CGPathAddCurveToPoint
,但我想要没有边缘的弯曲线