Cocos Creator_继承组件单例

前言

单例,在游戏开发中是比较常用的功能,全局唯一,可以在任何地方直接获取, 
省去了方法赋值 或者 属性面板拖动的麻烦。

普通单例_饿汉模式

不管有没调用,一开始就创建单例

 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://www.cnblogs.com/luorende/p/10694714.html