2015-07-04 43 views
0

我想添加旋轉的橢圓路徑到一箇中心點。像下面的圖像,但隨機旋轉橢圓。如何CGPath或SKShapeNode旋轉

atom

繪製這些橢圓軌道,

roadShape = SKShapeNode(ellipseInRect: centeredRect) 
roadShape.strokeColor = UIColor.greenColor() 
self.parent!.addChild(roadShape) 

需要使小顆粒遵循這​​些橢圓軌道,這就是爲什麼我需要一個路徑。

var followPath = SKAction.followPath(roadShape.path, asOffset: false, orientToPath: true, duration: 10); 
particle.runAction(followPath) 

我用SKShapeNode繪製並獲取路徑屬性。但不幸的是SKShapeNode沒有任何origin或anchorPoint屬性,所以我不能像樣的旋轉到SKShapeNode。你有任何建議讓它旋轉或不同的方式。

在此先感謝。

+0

是的,你說得對無光,嘗試過,但顯然出事了我試圖找到問題。 http://stackoverflow.com/questions/18710933/objective-c-how-to-rotate-cgrect這個解決方案很好解釋,我正在嘗試。 但仍然困惑爲什麼沒有SKShapeNode獲得了錨點或類似。 – mert

+0

馬特感謝您的批評,我已編輯問題謝謝。 – mert

回答

2
let roadShape1 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50)) 
roadShape1.strokeColor = UIColor.greenColor() 
roadShape1.lineWidth = 3 
roadShape1.position = CGPoint(x:frame.midX, y: frame.midY) 
addChild(roadShape1) 


let roadShape2 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50)) 
roadShape2.strokeColor = UIColor.greenColor() 
roadShape2.lineWidth = 3 

let action2 = SKAction.rotateByAngle(CGFloat(M_PI)*0.75, duration:0) 
roadShape2.runAction(action2) 
roadShape2.position = CGPoint(x:frame.midX, y: frame.midY) 
addChild(roadShape2) 


let roadShape3 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50)) 
roadShape3.strokeColor = UIColor.greenColor() 
roadShape3.lineWidth = 3 

let action3 = SKAction.rotateByAngle(CGFloat(M_PI)*0.25, duration:0) 
roadShape3.runAction(action3) 
roadShape3.position = CGPoint(x:frame.midX, y: frame.midY) 
addChild(roadShape3) 

您還可以使用applyTransform的旋轉適用於bezierPath 代替SKShapeNode如下:

let roadPath1 = UIBezierPath(ovalInRect: CGRect(x: -100, y: -25, width: 200, height: 50)) 
let roadPath2 = UIBezierPath(ovalInRect: CGRect(x: -100, y: -25, width: 200, height: 50)) 
roadPath2.applyTransform(CGAffineTransformMakeRotation(45.0 * CGFloat(M_PI)/180)) 
let roadPath3 = UIBezierPath(ovalInRect: CGRect(x: -100, y: -25, width: 200, height: 50)) 
roadPath3.applyTransform(CGAffineTransformMakeRotation(135.0 * CGFloat(M_PI)/180)) 

let roadShape1 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50)) 
roadShape1.path = roadPath1.CGPath 
roadPath1.stroke() 
roadShape1.lineWidth = 3 
roadShape1.position = CGPoint(x:frame.midX, y: frame.midY) 
addChild(roadShape1) 

let roadShape2 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50)) 
roadShape2.path = roadPath2.CGPath 
roadPath2.stroke() 
roadShape2.lineWidth = 3 
roadShape2.position = CGPoint(x:frame.midX, y: frame.midY) 
addChild(roadShape2) 

let roadShape3 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50)) 
roadShape3.path = roadPath3.CGPath 
roadPath3.stroke() 
roadShape3.lineWidth = 3 
roadShape3.position = CGPoint(x:frame.midX, y: frame.midY) 
addChild(roadShape3) 
+0

感謝您回答獅子座,但不幸的是SKShapeNode.path屬性不會改變,當我運行SKAction節點。我需要旋轉橢圓路徑來使物品跟隨它們。 – mert

+0

@mert查看我的編輯 –

+1

嘿,您好,編輯解決了使用bezierpath和skshapenode而不是使用SKShapeNode.path屬性的問題,謝謝。 – mert