2015-07-04 5 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 не имеет никакого происхождения или свойства anchorPoint, поэтому я не мог порядочно поворачиваться в SKShapeNode. Есть ли у вас какое-либо предложение сделать его вращением или другим способом.

Заранее спасибо.

+0

Да вы правы матовые, пробовал, но, видимо, что-то пошло не так, я пытаясь найти проблему. http://stackoverflow.com/questions/18710933/objective-c-how-to-rotate-cgrect это решение очень хорошо объясняет, я пытаюсь это сделать. Но все же путайте, почему у SKShapeNode нет якоря или подобного. – mert

+0

matt спасибо за вашу критику, я отредактировал вопрос спасибо. – 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 see my edit –

+1

Привет, вы правы, решили решить проблему с использованием bezierpath и skshapenode вместе вместо использования свойства SKShapeNode.path. – mert

Смежные вопросы