官方文档: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