2016-07-05 69 views
1

即时通讯工作在一个游戏上,我现在有一个问题,在追踪一个路径时,SpriteNode的zRotation。Swift SpriteKit - 在SKAction中的zRotation按照路径

所以我有一个ShapeNode它看起来像这样:使用这种形状的UIBezierPath enter image description here

林。

现在我有一个SpriteNode,它开始于这条路径的中间,并随机从左向右移动,否则。

对于此我有2个功能:

func FischRechtsBewegen(){ //for moving right 
    FischNode1.removeAllActions() 
    let BewegeRechts = SKAction.follow(FischKurveRechts.cgPath, asOffset: false, orientToPath: true, duration: 6) 
    FischNode1.run(BewegeRechts) 
} 

func FischLinksBewegen(){ //for moving left 
    FischNode1.removeAllActions() 
    let BewegeLinks = SKAction.follow(FischKurveLinks.cgPath, asOffset: false, orientToPath: true, duration: 6) 
    FischNode1.run(BewegeLinks) 
} 

此外,在该功能IM计算所述方向为SpriteNode一个新的路径的每一个变化。 (但是因为这段代码对于我的问题并不重要,所以我在示例代码中删除了它)

这条新路径(对于SKAction)从SpriteNode的实际位置开始,然后向右(如果新运动是正确的)还是向左(如果新的运动是离开的)带有到旧开始/终点的曲线。

我现在的问题是: 当向左移动SpritesNodes zRotation正是我想要它。节点“看起来”到屏幕的顶部。当向右移动时,SpriteNodes zRotation不好 - 现在节点指向非常难看的屏幕底部。

我试过不同的东西 - 我已经改变了我用于SpriteNode(旋转那里)的图像。我试图用动作改变SpriteNode的zRotation。没什么帮助。当然,因为在我的SKAction中我说“orientToPath = true”。我现在问...有没有一种简单的方法让SpriteNode总是“看”到屏幕的顶部,还是我必须在update()函数中手动更改zRotation?

我问,因为SKAction.follow(orientToPath)中有这个属性,我问自己我是否可以在这种情况下使用它,但是如果有一种方法可以改变它只是为了我的需要。或者如果这是不可能的 - 如果路径向左走,为什么orientToPath不同于正在向右走的路径中的orientToPath?

这是我的问题的视频,也许它更容易看到我的意思。 https://youtu.be/vLH5nUlE91U

+1

你试过设置'sprite.yScale = -1'和/或'sprite.xScale = -1'吗? – 0x141E

+0

它的工作.. omg - 很容易..谢谢你的帮助! – aignetti

回答

1

你可以尝试扭转你的UIBezierPath与方法:

public func bezierPathByReversingPath() -> UIBezierPath 

,而不是相反followPath行动,并监视用户与知道,当你是顺时针方向或逆时针方向意义上的布尔这个动作。

+1

谢谢你的回答。我没有测试这个解决方案,因为0x141E之前的答案已经有效。也许有其他人有同样的问题可以尝试这一个?我知道我试图扭转SKAction,这是行不通的。再次感谢你。 – aignetti

+0

反向SKAction它不够:)为你的项目祝你好运 –