Sprite-kit:以圆形路径移动元素

时间:2016-03-14 13:08:09

标签: swift sprite-kit

我试图让元素在cercle的边缘移动。

  • 我在屏幕中间创建并定位了一个cercle:
var base = SKShapeNode(circleOfRadius: 200 ) // Size of Circle
base.position = CGPointMake(frame.midX, frame.midY)  
base.strokeColor = SKColor.blackColor()
base.glowWidth = 1.0
base.fillColor = UIColor(hue:1, saturation:0.76, brightness:0.94, alpha:1)
base.zPosition = 0
self.addChild(base)
  • 然后我创建了另一个精灵并在其上添加了一个动作:
main = SKSpriteNode(imageNamed:"Spaceship")
main.xScale = 0.15
main.yScale = 0.15
main.zPosition = 1
let circle = UIBezierPath(roundedRect: CGRectMake((self.frame.width/2) - 200, CGRectGetMidY(self.frame) - 200,400, 400), cornerRadius: 200)
let circularMove = SKAction.followPath(circle.CGPath, duration: 5.0)
main.runAction(SKAction.repeatAction(circularMove,count: 2))
self.addChild(main)

宇宙飞船的第一次旋转(见下图)完全遵循圆的边缘,但第二次迭代会改变宇宙飞船的位置并将其移动到屏幕边界之外。 这是正常的还是我做错了什么?

感谢。

enter image description here

1 个答案:

答案 0 :(得分:7)

+ follow:duration:产生与follow:asOffset:orientToPath:duration:相同的效果,asOffsetorientToPath参数设置为true

关于来自docs的asOffset参数:

  

如果为true,则路径中的点是节点的相对偏移量   起始位置。如果为false,则节点中的点是绝对的   坐标值。

因此,您应该明确地将其设置为false:

let circularMove = SKAction.follow(circle.CGPath, asOffset: false, orientToPath: true, duration: 5)