我正在开发一款游戏,现在我在跟踪路径的同时对一个SpriteNode的zRotation提出了一个问题。
我正在为这个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
答案 0 :(得分:1)
您可以尝试使用以下方法撤消UIBezierPath
:
public func bezierPathByReversingPath() -> UIBezierPath
而不是反向跟踪路径操作,并使用布尔值监视此操作,该布尔值知道您何时达到顺时针方向感或逆时针方向感。