CocosCreator 加載與切換場景、定時器的使用 (第七篇)

直接進入正題!

一、加載與切換場景

代碼:cc.director.loadScene("MyScene");

1. 通過常駐節點進行場景資源管理和參數傳遞

引擎同時只會運行一個場景,當切換場景時,默認會將場景內所有節點和其他實例銷燬。如果我們需要用一個組件控制所有場景的加載,或在場景之間傳遞參數數據,就需要將該組件所在節點標記爲「常駐節點」,使它在場景切換時不被自動銷燬,常駐內存。

標記常駐節點:cc.game.addPersistRootNode(myNode);
取消常駐節點 :cc.game.removePersistRootNode(myNode);

需要注意的是上面的 API 並不會立即銷燬指定節點,只是將節點還原爲可在場景切換時銷燬的節點。

2. 場景加載回調

代碼:cc.director.loadScene("MyScene", onSceneLaunched);
上一行裏 onSceneLaunched 就是聲明在本腳本中的一個回調函數,在場景加載後可以用來進一步的進行初始化或數據傳遞的操作。
由於回調函數只能寫在本腳本中,所以場景加載回調通常用來配合常駐節點,在常駐節點上掛載的腳本中使用

3. 預加載場景

後臺靜默加載新場景,並在加載完成後手動進行切換。

cc.director.preloadScene("table", function () {
   cc.log("Next scene preloaded");
});

之後在合適的時間調用 loadScene , 就可以真正切換場景。
cc.director.loadScene("table");
就算預加載還沒完成,你也可以直接調用 cc.director.loadScene ,預加載完成後場景就會啓動。


二、使用計時器

也許有人會認爲 setTimeout 和 setInterval 就足夠了,開發者當然可以使用這兩個函數,不過我們更推薦使用計時器,因爲它更加強大靈活,和組件也結合得更好!

首先,先創建一個指向某個組件的變量,變量名爲 component

// 1. 開始一個計時器
 component.schedule(function() {
     // 這裏的 this 指向 component
     this.doSomething();
 }, 5);// 計時器將每隔 5s 執行一次。

// 2. 更靈活的計時器
 var interval = 5;// 以秒爲單位的時間間隔
 var repeat = 3; // 重複次數
 var delay = 10; // 開始延時
 component.schedule(function() {
     // 這裏的 this 指向 component
     this.doSomething();
 }, interval, repeat, delay); // 10 秒後開始計時,每 5 秒執行一次,執行 3 + 1 次。

// 3. 只執行一次的計時器(快捷方式)
 component.scheduleOnce(function() {
     // 這裏的 this 指向 component
     this.doSomething();
 }, 2);// 上面的計時器將在兩秒後執行一次回調函數,之後就停止計時。


// 4. 取消計時器
// 開發者可以使用回調函數本身來取消計時器:
 this.count = 0;
 this.callback = function () {
     if (this.count === 5) {
         // 在第六次執行回調時取消這個計時器
         this.unschedule(this.callback);
     }
     this.doSomething();
     this.count++;
 }
 component.schedule(this.callback, 1);
 // 5. 取消組件所有的計時器
this.unscheduleAllCallbacks();

注意:組件的計時器調用回調時,會將回調的 this 指定爲組件本身,因此回調中可以直接使用 this 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章