Swift

2016-12-29 28 views
6

'da deltaTime ile 1 saniye nasıl doğru hesaplanır deltaTime içinde geçen bir saniye hesaplamaya çalışıyorum ama nasıl yapacağımı bilmiyorum, çünkü deltaTime sürekli olarak 0.0166 veya 0.0167 yazdırıyor.Swift

override func update(_ currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 

    deltaTime = currentTime - lastTime 
    lastTime = currentTime 

Nasıl bu yüzden burada her saniye çalıştırmak için bazı mantık sıkmak olabilir yapabilirim: Burada

benim kodudur?

DÜZENLEME: Aşağıdakileri bulmayı başardım, ama daha iyi bir yolu var mı?

  deltaTimeTemp += deltaTime 
      if (deltaTimeTemp >= 1.0) { 
       print(deltaTimeTemp) 
       deltaTimeTemp = 0 
      } 
+1

Güncelleştirme nasıl çağrılıyor? Bir CADisplayLink kullanıyor musunuz? Ya da ne? – matt

+0

SpriteKite kullanarak tek bir sahne oyunundaki her kare. – tbaldw02

+0

Sahneniz 60 FPS hızında çalışıyor, bu nedenle her kare ~ 16,6 ms aralıklıdır. Tam olarak ne elde etmeye çalışıyorsun? – Alexander

cevap

4

: (swift yazılmış 3)

let wait = SKAction.wait(forDuration: 1.0) 
let spawnSomething = SKAction.run { 
    //code to spawn whatever you need 
} 

let repeatSpawnAction = SKAction.repeatForever(SKAction.sequence([wait, spawnSomething])) 

self.run(repeatSpawnAction) 
+0

Teşekkürler! Bunu bir atış yapacağım. – tbaldw02

0

Sadece 1 saniyelik aralıklarla ilgileniyorsanız, deltaları her kare için saklamamanız gerekir. Sadece başlangıç ​​saatini saklayın ve her bir kareyi geçen süreyi hesaplayın. Geçen süre 1 saniye aralığınızı geçtiğinde, başlangıç ​​zamanını şimdi sıfırlarsınız.

override func update(_ currentTime: CFTimeInterval) { 
     let elpasedTimeSinceLastupdate = currentTime - startTime 
     //Check if enough time has elapsed otherwise there is nothing to do 
     guard elpasedTimeSinceLastupdate > requiredTimeIntervale else { 
     return 
     } 
     startTime = currentTime 
     // Do stuff here 
    } 

Ben ideal bunu o zaman zamanlayıcılar bir dizi ve aramaya aralıklarla ve blok bir tablo korumak gerekir, 1'den fazla zamanlayıcı istiyorum. Bu çok karmaşık almaya başlar ve gerçekten muhtemelen sadece çok daha yalındır iOS 10'da blok Zamanlayıcı inşa kullanmalıdır: Hep bu tür bir şey için SKActions kullanmak

_ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in 
     //Do stuff every second here 
    } 
+2

SpriteKit'te Timer'ı kullanmaktan kaçınmalısınız. Bu ideal olmaktan uzak. Güncelleme yöntemine veya SKActions'a bağlı kalmalısınız. Bunun nedeni, Timer'ın (NSTimer) oyun döngüsü ile eşleştirilmemesidir. Araçlar, özel bir duraklama özelliği uygulamak zorunda kalacaksınız. Zamanlayıcı, düğümün, sahnenin veya görüntünün duraklatılmış durumuna uymaz, bu nedenle birçok durumda geçersiz kılmanız/yeniden yaratmanız ve bir şeyler yapmanız gerekir. – Whirlwind