雪碧套件中的之字形路径
Zig zac path in sprite kit
我希望精灵套件节点向右移动 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
值以更改之字形的数量和每个之字形移动的距离量。
我希望精灵套件节点向右移动 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
值以更改之字形的数量和每个之字形移动的距离量。