[SceneKit專題]3-Render-Loop渲染循環

說明

本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會node

此書對應的代碼地址git

SceneKit系列文章目錄github

SCNView有一個delegate屬性,須要遵照SCNSceneRendererDelegate協議,這樣就能夠在每幀畫面的動畫和渲染過程當中收到代理方法的調用.swift

QQ20170403-202757@2x.png

  1. Update:會調用renderer(_:updateAtTime:)代理方法,能夠在這裏寫一些基礎邏輯,好比添加或移除node節點.app

  2. Execute Actions&Animations:執行actions(動做)和animations(動畫).post

  3. Did Apply Animations:會調用renderer(_: didApplyAnimationsAtTime:)方法,此時場景中全部節點在這一幀的actions(動做)和animations(動畫)都已經更新完成.學習

  4. Simulates Physics:物理效果模擬.動畫

  5. Did Simulate Physics:會調用renderer(_:didSimulatePhysicsAtTime:)方法,此時物理效果模擬已經完成,能夠在這裏添加和物理效果有關的代碼,好比node在受到一個力影響後改變顏色.lua

  6. Evaluates Constraints:約束更新.spa

  7. Will Render Scene:會調用renderer(_:willRenderScene:atTime:)方法,此時即將要渲染場景,能夠在這裏對場景作最後的更改.

  8. Renders Scene In View:SceneKit在view中渲染場景.

  9. Did Render Scene:會調用renderer(_: didRenderScene: atTime:)方法,它標識着一個渲染循環的結束,能夠寫一些邏輯更新代碼在這裏,好比遊戲中血量增減.

注意 默認狀況下,若是一個場景中沒有任何改變時,Scene Kit會進入"paused"(暫停)狀態,渲染循環暫停後代理方法將不會繼續調用,爲了防止這種狀況,須要在建立SCNView實例時設置playing屬性爲true如

scnView.playing = true
複製代碼

這樣渲染循環的代理就會一直調用.

相關文章
相關標籤/搜索