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