2017-03-07 19 views
0

我正在Spritekit中製作遊戲,並且有一個計時器不斷更新,以便更新函數不斷更新。有時在我的遊戲中,我改變了物理世界的速度,當發生這種情況時,我希望計時器的速度也會改變。 更具體地說,我將速度改爲0.5。 因此,我希望在那段時間能夠以一半的速度流逝。 這是我的代碼,用於減少時間。在didMove函數中調用lastSwitch。Spritekit更新函數中運行時間較慢

var lastSwitch = CFAbsoluteTimeGetCurrent() 
override func update(_ currentTime: TimeInterval) { 
    let currentTime = CFAbsoluteTimeGetCurrent() 

    let timePassed = currentTime - lastSwitch 

    let timeLeft = totalTime - timePassed 
    //... bla bla 
    time.text = "\(timeLeft)" 
} 
+0

當投票時,請讓佩德羅知道您爲什麼低估投票,以便佩德羅能夠正確解決他的問題。 – Knight0fDragon

回答

1

節點(場景是一個節點)有它自己的速度性能,所以只設置(self.speed = 0.5半速)。順便說一句,我不知道你在做什麼,但我會建議不要按照你現在這樣做的方式進行計時,因爲場景時間與現實世界時間不同。

相反,使用自定義操作:

func startTimer() 
{ 
    let duration = 1 
    let totalGameTime = SKAction.customAction(withDuration:duration) 
         { 
          [unowned self] (node,elapsedTime) in 
          let timeLeft = duration - elapsedTime 
          self.time.text = "\(timeLeft)" 
         } 
    self.run(totalGameTime,withKey:"totalGameTime") 
} 

這樣,當您使用speed屬性,計時器與它減慢。

因此,假設您將遊戲速度設置爲0.5。完成所提供的動作需要2秒鐘,因爲您需要持續時間/場景速度,因此1/0.5爲2.

+0

感謝您的回答!因此,使用該功能,我基本上做的是在didMove函數中調用它? –

+0

每當你想啓動計時器 – Knight0fDragon

+0

謝謝你的偉大答案,它的工作原理:) –