学习笔记_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://blog.csdn.net/leovnay/article/details/79272977

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值