說明
本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會
SCNView有一個delegate屬性,需要遵守SCNSceneRendererDelegate
協議,這樣就可以在每幀畫面的動畫和渲染過程中收到代理方法的呼叫.
-
Update:會呼叫
renderer(_:updateAtTime:)
代理方法,可以在這裡寫一些基礎邏輯,比如新增或移除node節點. -
Execute Actions&Animations:執行actions(動作)和animations(動畫).
-
Did Apply Animations:會呼叫
renderer(_: didApplyAnimationsAtTime:)
方法,此時場景中所有節點在這一幀的actions(動作)和animations(動畫)都已經更新完成. -
Simulates Physics:物理效果模擬.
-
Did Simulate Physics:會呼叫
renderer(_:didSimulatePhysicsAtTime:)
方法,此時物理效果模擬已經完成,可以在這裡新增和物理效果有關的程式碼,比如node在受到一個力影響後改變顏色. -
Evaluates Constraints:約束更新.
-
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
複製程式碼
這樣渲染迴圈的代理就會一直呼叫.