2017-07-18 19 views
1

私はボールを表すSKスプライトノードを使用しています。私が忙しくしていることは、ボールが毎回の時間間隔の後に色を変えたいということです。時間の間隔でランダムな色を生成

override func update(_ currentTime: TimeInterval) { 

    ball.color = UIcolor.random() 

    } 

私はコードが色を変えるほど十分に機能すると言います。しかし、問題は、私は2秒ごとのように、私は色の変化を計画したよりもはるかに速く、すべてのフレームの魔法の色を変更することです。この問題への

私の回避策はので、このコードは、値の時間をフレームごとに更新されながら、色ごとに時間== 300を変更するように設計されて

var relative = 300 

var Time = 0 { 

    didSet { 

     if Time == relative { 

      ball.color = UIColor.random() 
     } 
    } 
} 

override func update(_ currentTime: TimeInterval) { 

    PT.run(SKAction.moveTo(x: ball.position.x, duration: 0.5)) 

    Time += 1 

    if Time == relative { 

     Time = 0 
    } 
} 

の下に表示されます。 300に達すると時間値はリセットされます。

このようにして、すべてのフレームではなく数秒後に色を変更できます。

このデザインは、実行する機能をコーディングして設定するための安価で実績のない方法に見えるかもしれません。だからこそ私は、経験豊富なプログラマーに、このロジックを設計するためのよりよい方法を手助けするように頼んでいるのです。私は機能や操作方法が非常に新しいので、「オーバーライド機能アップデート」などの「組み込み関数」に間に合わずに、実行可能な、または自己完結型の関数をコーディングする方法を教えてください。

答えて

0

あなたは、あなたが「リアルタイム」タイマーを作成するには、デルタは初めてとの和を計算することができ、特定の時間で何かを変更したい場合は、単純な弾性 if currentTime % 300 == 0 { ball.color = UIColor.random() }

0

を使用することができます。デルタ時間は、更新メソッドの最後の呼び出し以降に経過した時間であり、エンティティおよびコンポーネントを更新するためによく使用されるメソッドです。

値が1000msを超えると、ランダムカラー関数を呼び出してタイマーをリセットするだけです。

//prevent from starting with a 0 time interval by using optional 
var lastUpdateTimeInterval: CFTimeInterval? 
var timer: CFTimeInterval = 0.0 
override func update(_ currentTime: TimeInterval) { 
    var delta: CFTimeInterval = 0.0 
    if let luti = lastUpdateTimeInterval { 
     delta = currentTime - luti 
    } 

    //use delta for update logic like entitys.update(delta) 
    timer += delta 

    if timer > 1 { //after 1s 
     ball.color = UIColor.random() 
     timer = 0.0 //reset timer 
    } 

    lastUpdateTimeInterval = currentTime 
} 
+0

これは機能しませんでした。私は、タイマが何らかの値を割り当てられていないためだと考えています。 – user3211359

+0

@ user3211359 'var timer:CFTimeInterval = 0.0'は代入式で、' timer + = delta'はデルタを代入します。デルタ時間がない場合、currentTimeを適切に渡すことはありません。 – BennX

+0

私はタイマーを割り当てました。問題は、タイマーはどういうわけかこのように見える 0.0166666669974802 - ルーティ 26790.488545286 - デルタ – user3211359

関連する問題