Swift SpriteKit - SKAction中的zRotation遵循路径

时间:2016-07-05 19:46:34

标签: ios sprite-kit rotation uibezierpath skaction

我正在开发一款游戏,现在我在跟踪路径的同时对一个SpriteNode的zRotation提出了一个问题。

所以我有一个看起来像这样的ShapeNode: enter image description here

我正在为这个Shape使用UIBezierPath。

现在我有一个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)
}

此外,在此函数中,我计算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 个答案:

答案 0 :(得分:1)

您可以尝试使用以下方法撤消UIBezierPath

public func bezierPathByReversingPath() -> UIBezierPath

而不是反向跟踪路径操作,并使用布尔值监视此操作,该布尔值知道您何时达到顺时针方向感或逆时针方向感。