更新 我刪除了大部分我的應用程序運行的進程,但仍觀察到這些「滯後」(場景進行渲染時)didFinishUpdate和下一個更新的博弈滯後。所以我嘗試了一個新項目(與XCode 8一起發佈的SpriteKit Demo項目並記錄了幀時間,即使在這裏,幀也是滯後的,請看下面的圖片:Frame time from SpriteKit demo。至少這對我的遊戲沒有影響, 「T使其更容易調試..: -/SpriteKit -
你可以觀察到同樣的效果你可以簡單地用下面的代碼記錄時間:
var cycleStart = Date().timeIntervalSince1970
var cycleEnd = Date().timeIntervalSince1970
var lastTime = TimeInterval()
var delta = TimeInterval()
override func update(_ currentTime: TimeInterval) {
delta = currentTime - lastTime
lastTime = currentTime
print("\(delta) \(cycleEnd-cycleStart)")
cycleStart = Date().timeIntervalSince1970
}
override func didFinishUpdate() {
cycleEnd = Date().timeIntervalSince1970
}
而且我一直在想,爲什麼滯後幀的持續時間會跳到33ms,這就是SpriteKit的工作方式,我的意思是如果不是所有進程都在時間上完成,下一幀會被跳過,而不是延長單個幀持續時間達到完成所有專業版所需的時間量正如事實?
原始問題 我的SpriteKit遊戲有時會滯後。不幸的是,我無法確定可能導致滯後的任何功能或過程。所以我試圖通過測量整個場景處理過程中的時間來縮小它的範圍。請看看圖: Plot: Total frame time vs. update->didFinishUpdate
我繪製進入update()函數,直到didFinishUpdate()之間的時間間隔被稱爲(橙色)和時間一個更新()和下次更新之間()函數,所以整個幀時間(藍色)。
我看不到延遲之間的direkt鏈接和update/didFinishUpdate之間的超長時間。看起來好像渲染過程對於某些幀需要更長的時間。
另一個有趣的觀察:正常幀速率是60(16.6ms),但「滯後」幀持續時間大約是33ms,所以30fps。
現在我的兩個問題: 1.是否有任何方法來分析渲染過程中發生了什麼? 2.你們有沒有觀察到類似的現象,顯然整個幀被跳過(如果這是對33ms幀的正確解釋)?
任何幫助,非常感謝!先謝謝你!
PS:在運行iOS 10.2的iPhone 7上記錄時間,該應用程序在swift3中編程。
請添加一些代碼來說明問題,或者我們無法幫助很多 –
我希望我可以添加一些代碼。由於所有函數都是在update()和didFinishUpdate()之間完全執行的,並且在滯後幀和長函數執行時間之間沒有可見關係,所以我不知道應該發佈哪些代碼部分。 – Kai