1.目的:學習生命周期回調函數以及回調順序,更有利於我們邏輯的處理把控。
2.生命周期回調函數:
節點:指cc.Node;組件:指cc.Component。
①onLoad:腳本組件綁定的節點所在場景加載時系統回調一次(或者節點active從false變為true時系統回調一次)。可在這里獲取場景中其它節點,並可以初始化一些不常改變的屬性。
②start:只在第一次update前系統回調一次。這里可以初始化一些經常改變的屬性。
③update(dt):每一幀渲染前系統回調,主要用於處理邏輯。dt為上一幀到當前幀時間ms間隔。
④lateUpdate(dt):每一幀渲染后系統回調,用於處理邏輯。dt為上一幀到當前幀時間ms間隔。
⑤onDestroy:組件或者節點調用了destroy()函數,在幀結束時系統回調。或者場景切換或銷毀時系統回調。主要用於資源回收。
⑥onEnable:組件的enabled從false變為true是系統回調一次;節點active從false變為true時系統回調一次。
⑦onDisable:和onEnable相反。
3.單個腳本的回調順序
創建一個腳本script1.js add到Canvas節點上,可以看到對應的順序如下:

4.多個腳本的回調順序
再創建一個script2.js,也add到Canvas節點上,script1組件之下,可以看到對應的順序如下:

①所有節點onLoad->所有節點onEnable->所有節點start->所有節點update->所有節點lateUpdate
②調用的順序和腳本的順序有關系,比如我們將script2.js 移動到 script1.js之上,則可以看到script2的回調函數比script1的回調函數先執行。
5.創建一個EnableNode節點測試組件的enabled屬性
①創建一個測試節點EnableNode,增加腳本組件EnableTest,並將腳本組件默認enabled=false

控制代碼
let enableNode = cc.find("Canvas/EnableNode"); //獲取EnableNode節點
let enableTest = enableNode.getComponent("EnableTest"); //獲取節點中的組件
enableTest.enabled = !enableTest.enabled; //設置組件的enabled
②啟動的時候,我們可以看到onLoad

③首次設置enabled=true,可以看到按順序調用了onEnable->start->update->lateUpdate

④設置enabled=false,可以看到onDisable

⑤再次設置enabled=true,可以看到onEnable->update->lateUpdate(沒有了start,所以說明start僅僅只會在組件enabled為true時的首次update前調用一次!)

6.創建一個ActiveNode節點測試節點的active屬性
①創建一個測試節點ActiveNode,設置節點的active屬性為false,增加腳本組件ActiveTest

控制代碼
let activeNode = cc.find("Canvas/ActiveNode"); //獲取EnableNode節點
activeNode.active = !activeNode.active; //active
②首次設置active=true,可以看到按順序調用了onLoad->onEnable->start->update->lateUpdate

③設置active=false,可以看到onDisable

④再次設置active=false,可以看到和上面組建的效果一致,沒有了star

7.由5和6可見,節點的active控制所有組件的enabled。
也就是說active=true,則會調用所有組件的onEnable;
active=false,則會調用所有組件的onDisable;
PS:
1.測試環境v2.0.5+win10
2.測試代碼下載地址:https://files-cdn.cnblogs.com/files/chevin/CocosCreatorBlog03.zip
3.cocos2dx中的onEnter/onExit在這里不存在的。
以上。
