2017-03-07 9 views
0

私はSpritekitでゲームを作っています。タイマーがダウンしていて、アップデート機能が変化しています。時には私のゲームでは、物理世界のスピードを変えます。それが起こると、タイマーがダウンしてスピードを変えたいと思っています。 具体的には、速度を0.5に変更しています。 私はその時間の半分のスピードで走っていきたいと思っています。 時間を節約するためのコードは次のとおりです。 lastSwitchはdidMove関数で呼び出されます。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

downvotingするときに、Pedroが質問を正しく修正できるようにdownvotedした理由を知ってください。 – Knight0fDragon

答えて

1

ノード(シーンノードである)ので、ちょうど(半分の速度のためのself.speed = 0.5)ように設定し、独自の高速性を有しています。ところで、私はあなたが何をやっているのかはわかりませんが、現実世界の時間と場面の時間が違うので、あなたがやっているようにタイミングを取らないことをお勧めします。

代わりに、カスタムアクションを使用します。あなたはspeedプロパティを使用する場合は、この方法で

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") 
} 

を、タイマーはそれで遅くなります。

ゲーム速度を0.5に設定したとします。時間/シーンの速度が1/0.5 = 2であるため、2秒で完了します。

+0

答えをありがとう!その関数では、基本的にdoMove関数で呼びますか? –

+0

いつでもタイマーを起動したい – Knight0fDragon

+0

あなたの素晴らしい答えをありがとう、それは動作します:) –

関連する問題