本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會node
此書對應的代碼地址git
SceneKit系列文章目錄github
SCNView有一個delegate屬性,須要遵照SCNSceneRendererDelegate
協議,這樣就能夠在每幀畫面的動畫和渲染過程當中收到代理方法的調用.swift
Update:會調用renderer(_:updateAtTime:)
代理方法,能夠在這裏寫一些基礎邏輯,好比添加或移除node節點.app
Execute Actions&Animations:執行actions(動做)和animations(動畫).post
Did Apply Animations:會調用renderer(_: didApplyAnimationsAtTime:)
方法,此時場景中全部節點在這一幀的actions(動做)和animations(動畫)都已經更新完成.學習
Simulates Physics:物理效果模擬.動畫
Did Simulate Physics:會調用renderer(_:didSimulatePhysicsAtTime:)
方法,此時物理效果模擬已經完成,能夠在這裏添加和物理效果有關的代碼,好比node在受到一個力影響後改變顏色.lua
Evaluates Constraints:約束更新.spa
Will Render Scene:會調用renderer(_:willRenderScene:atTime:)
方法,此時即將要渲染場景,能夠在這裏對場景作最後的更改.
Renders Scene In View:SceneKit在view中渲染場景.
Did Render Scene:會調用renderer(_: didRenderScene: atTime:)
方法,它標識着一個渲染循環的結束,能夠寫一些邏輯更新代碼在這裏,好比遊戲中血量增減.
注意 默認狀況下,若是一個場景中沒有任何改變時,Scene Kit會進入"paused"(暫停)狀態,渲染循環暫停後代理方法將不會繼續調用,爲了防止這種狀況,須要在建立SCNView實例時設置playing屬性爲true如
scnView.playing = true
複製代碼
這樣渲染循環的代理就會一直調用.