1.目的:學習生命週期回調函數以及回調順序,更有利於咱們邏輯的處理把控。html
2.生命週期回調函數:函數
節點:指cc.Node;組件:指cc.Component。post
①onLoad:腳本組件綁定的節點所在場景加載時系統回調一次(或者節點active
從false變爲true時系統回調一次)。可在這裏獲取場景中其它節點,並能夠初始化一些不常改變的屬性。學習
②start:只在第一次update前系統回調一次。這裏能夠初始化一些常常改變的屬性。測試
③update(dt):每一幀渲染前系統回調,主要用於處理邏輯。dt爲上一幀到當前幀時間ms間隔。url
④lateUpdate(dt):每一幀渲染後系統回調,用於處理邏輯。dt爲上一幀到當前幀時間ms間隔。spa
⑤onDestroy:組件或者節點調用了destroy()函數,在幀結束時系統回調。或者場景切換或銷燬時系統回調。主要用於資源回收。3d
⑥onEnable:組件的enabled從false變爲true是系統回調一次;節點active
從false變爲true時系統回調一次。code
⑦onDisable:和onEnable相反。cdn
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在這裏不存在的。
以上。