2015-06-18 97 views
0

我有點卡在如何處理以下問題:SpriteKit:我需要類似.pauseActionForKey()的東西?

我的滾動遊戲產生從plist加載的不同類型的障礙。產卵由SKAction延遲,每個障礙的持續時間由y位置計算。

更新反映Wraithseeker的答案。

這是所有的計時器在開始設置代碼中的 didMoveToView()

for obstacleTuple in level.obstacleTuples { 
    let positionY = obstacleTuple.positionY 
    let obstacle = obstacleTuple.obstacle as! SKNode 

    let duration = NSTimeInterval(positionY/kObstacleDistancePerSec) 

    // **Update**: Instead of running the wait action on the scene... 
    //runAction(SKAction.waitForDuration(duration), completion: { 
    // I should run it on the foregroundNode... 
    foregroundNode.runAction(SKAction.waitForDuration(duration), completion: { 
    self.foregroundNode.addChild(obstacle) 
    }) 
} 


// And then toggle the pause property on that node to stop and resume. 
let foregroundNode.paused = foregroundNode.paused == true ? false : true 

我想有特殊事件(取決於用戶行爲發生),在此期間,上述障礙的產卵進一步延遲,玩家可以收集獎勵物品。 所以基本上,我需要爲等待SKAction分配一個鍵,然後有一個.pauseActionForKey()方法(而不是.removeActionForKey())。

是否可以用SKAction來延長? 有沒有更好的方法來實現我想要做的事情?

+0

你問如何暫停一個節點,它是當前的行動? – sangony

+0

不,使用暫停屬性在這裏沒有幫助,因爲等待操作繼續運行。考慮一下,也許我應該在障礙物上運行等待SKAction而不是場景。但即使如此,我還可以在尚未添加的節點上使用暫停屬性嗎?我會盡快嘗試。 – nontomatic

回答

0

解決此問題的一種方法是創建一個空的SKNode並將這些操作分配給您希望暫停的節點。這是因爲當你暫停動作時,它不會暫停你的整個遊戲,因爲你現在使用selfSKActions分配給場景。

要按照sangony的建議暫停操作,只需在空的SKNode上調用暫停。

一個例子

myEmptyNode.pause() // 
+0

感謝Wraithseeker,我應該在foregroundNode上運行等待操作並暫停該節點以實現我想要的功能。我更新了代碼。 – nontomatic