Swift 精灵套件中的Zig zac路径
我希望精灵套件节点向右移动200像素,向左移动400像素,然后再向右移动400像素,依此类推,直到离开屏幕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
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
,但我想要没有边缘的弯曲线