Cocos Creator學習三:生命周期回調函數


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在這里不存在的。

以上。

 

Cocos Creator學習目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM