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

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

前言

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

無論有沒調用,一開始就建立單例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 });
普通單例_飽漢模式

調用時才建立單例對象node

 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.jsui

 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

this

 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/79272977spa

相關文章
相關標籤/搜索