【问题标题】:How to CGPath or SKShapeNode Rotation如何 CGPath 或 SKShapeNode 旋转
【发布时间】:2015-07-04 22:14:43
【问题描述】:

我想将旋转的椭圆路径添加到一个中心点。如下图,但随机旋转椭圆。

用,画出这些椭圆轨道,

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。你有什么建议让它旋转或不同的方式。

提前致谢。

【问题讨论】:

  • 是的,你说得对,马特,试过了,但显然出了点问题,我正试图找出问题所在。 stackoverflow.com/questions/18710933/…这个解决方案很好解释,我正在尝试。但仍然很困惑为什么 SKShapeNode 没有得到一个锚点或类似的东西。
  • matt 感谢您的批评,我已经编辑了问题,谢谢。

标签: ios swift sprite-kit cgpath skshapenode


【解决方案1】:
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)

【讨论】:

  • 感谢您回答 Leo,但不幸的是,当我将 SKAction 运行到节点时,SKShapeNode.path 属性没有改变。我需要旋转椭圆路径以使项目跟随它们。
  • 嘿,Leo,您已经解决了同时使用 bezierpath 和 skshapenode 而不是使用 SKShapeNode.path 属性的问题,谢谢。
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多