學習筆記_Cocos Creator_繼承組件單例


官方文檔:https://docs.cocos.com/creator/manual/zh/scripting/reference/class.html

前言

單例,在游戲開發中是比較常用的功能,全局唯一,可以在任何地方直接獲取, 
省去了方法賦值 或者 屬性面板拖動的麻煩。
普通單例_餓漢模式

不管有沒調用,一開始就創建單例

 1 // Singleton.js 
 2 var Singleton = cc.Class({
 3 
 4     // 成員變量
 5     name : "",
 6     age : 0,
 7 
 8     ctor () {
 9         this.name = "Leovany";
10         this.age = 20;
11     },
12     statics: {
13         _instance: null
14     },
15 
16     printInfo(){
17         cc.warn("name = " + this.name+",age = " + this.age);
18     }
19 });
20 
21 Singleton._instance = new Singleton();
22 module.exports = Singleton;

 

 1 // GameManager.js
 2 // 引入單例類
 3 var Singleton = require("Singleton");
 4 
 5 var GameManager = cc.Class({
 6         cc.warn(Singleton._instance.name);
 7         Singleton._instance.printInfo();
 8 });
普通單例_飽漢模式

調用時才創建單例對象

 1 // Singleton.js 
 2 var Singleton = cc.Class({
 3     // 成員變量
 4     name : "",
 5     age : 0,
 6 
 7     ctor () {
 8         this.name = "Leovany";
 9         this.age = 20;
10     },
11 
12 
13     printInfo(){
14         cc.warn("name = " + this.name+",age = " + this.age);
15     }
16 });
17 
18 Singleton._instance = null;
19 Singleton.getInstance = function () {
20     if(!Singleton._instance){
21         Singleton._instance = new Singleton();
22     }
23     return Singleton._instance;
24 }
25 
26 module.exports = Singleton;

 

1 // GameManager.js 
2 // 引入單例類
3 var Singleton = require("Singleton");
4 
5 var GameManager = cc.Class({
6         // 調用
7         cc.warn(Singleton.getInstance().name);
8         Singleton.getInstance().printInfo();
9 });

 

單例組件

1.新建一個 GameManager.js

 1 // 開頭必須 新建一個變量引用 var GameManager
 2 var GameManager = cc.Class({
 3     extends: cc.Component,
 4     properties: {
 5         age : 20
 6     },
 7     statics: {
 8         _instance : null
 9     },
10     //最先進入地方
11     onLoad(){
12         cc.warn(" ============== GameManager init" );
13         GameManager._instance = this; 
14          //設置幀率
15         cc.game.setFrameRate(60);
16         //設置該對象為不銷毀
17         cc.game.addPersistRootNode(this.node);
18     }
19 }

2.調用地方 
新建一個 Test.js

 1 // 開頭必須require 引入單例 GameManager
 2 var GameManager = require("GameManager");
 3 cc.Class({
 4     extends: cc.Component,
 5 
 6     start () {
 7        // 直接調用
 8        // 輸出: GameManager name : GameManager<GameManager>,age = 20
 9        cc.warn("GameManager name : "+  GameManager._instance.name 
10                +",age = " + GameManager._instance.age );  
11     },
12 
13 });

特別強調

  • 單例組件類,開頭必須要有變量引用 ,如var GameManager = cc.Class({...})
  • 調用單例組件的類,開頭必須 require 引入


轉載: https://blog.csdn.net/leovnay/article/details/79272977


免責聲明!

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



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