2016-07-05 73 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它不夠:)爲你的項目祝你好運 –