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 引入

上一篇:【洛谷P2925 [USACO08DEC]干草出售Hay For Sale】


下一篇:source tree使用经验