前言

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

普通单例_饿汉模式

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

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

Cocos Creator_继承组件单例的更多相关文章

  1. 学习笔记_Cocos Creator_继承组件单例

    官方文档:https://docs.cocos.com/creator/manual/zh/scripting/reference/class.html 前言 单例,在游戏开发中是比较常用的功能,全局 ...

  2. Unity 游戏框架搭建 (十三) 无需继承的单例的模板

    之前的文章中介绍的Unity 游戏框架搭建 (二) 单例的模板和Unity 游戏框架搭建 (三) MonoBehaviour单例的模板有一些问题. 存在的问题: 只要继承了单例的模板就无法再继承其他的 ...

  3. Lua面向对象----类、继承、多继承、单例的实现

    (本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...

  4. C++可继承的单例基类模板

    目录 一.介绍 二.代码 三.关键处 五.参考资料 一.介绍 最近在写一个项目,其中用到好几个单例,类本身的设计不是很复杂,但是如果每个都写一遍单例又觉得有点冗余:所以查资料写了一个单例基类模板,只要 ...

  5. 类 __new__方法实现单例

    继承了单例的类,子类也是单例模式

  6. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)

    回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回  日志记录组件之自主的Vlog>和<第三回  日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...

  7. JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖

    JAVA之旅(六)--单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖 java也越来越深入了,大家加油吧!咱们一步步来 一.单例设计模式 什么是设计模式? JAVA当中有 ...

  8. 008单例、继承、final

    内容:单例,类继承,final #################################################################################### ...

  9. React实现单例组件

    问题背景 在工作中遇到了这样一个场景,写了个通用的弹窗组件,却在同一个页面中多次使用了该组件.当点击打开弹窗时,可想而知,一次性打开了多个弹窗,而业务需求只需要打开一个. 我个人在解决问题过程中的一些 ...

随机推荐

  1. JavaScript我学之一变量类型

    本文是网易云课堂金旭亮老师的课程笔记,记录下来,以供备忘. 变量类型  只有6种 : 四种原始数据类型boolean , number, string , undefine, 其他object,fun ...

  2. fft,ntt

    在被两题卡了常数之后,花了很久优化了自己的模板 现在的一般来说任意模数求逆1s跑3e5,exp跑1e5是没啥问题的(自己电脑,可能比luogu慢一倍) 当模数是$998244353,100453580 ...

  3. codeforces 493 div1 e

    题解: 和这件zhcs的那题有点像 第一种做法是考虑i,i+1之间的贡献 这样子就是矩形加减然后求矩形最小值个数 另一种做法是我们从左向右维护mx-nx-r+l 跟之前那题一样我们知道这个的最小值为0 ...

  4. 【转】Oracle imp 总是不停地重复闪烁

    http://blog.itpub.net/7282477/viewspace-1003160/ 在dos下执行: imp username/password buffer=1000000 file= ...

  5. sql语法总结

    1.创建表 . 创建时间 default current_imestamp(6) 更新时间 default current_timestamp(6)  on update current_timest ...

  6. debian9安装mysql

    cd /tmp wget https://dev.mysql.com/get/mysql-apt-config_0.8.7-1_all.deb dpkg -i mysql-apt-config_*.d ...

  7. Spring Boot 项目实战(五)集成 Dubbo

    一.前言 上篇介绍了 Redis 的集成过程,可用于解决热点数据访问的性能问题.随着业务复杂度的提高,单体应用越来越庞大,就好比一个类的代码行数越来越多,分而治之,切成多个类应该是更好的解决方法,所以 ...

  8. [转]Web应用防火墙WAF详解

    通过nginx配置文件抵御攻击 0x00 前言 大家好,我们是OpenCDN团队的Twwy.这次我们来讲讲如何通过简单的配置文件来实现nginx防御攻击的效果. 其实很多时候,各种防攻击的思路我们都明 ...

  9. 【Codeforces】【网络流】【线段树】【扫描线】Oleg and chess (CodeForces - 793G)

    题意: 给定一个n*n的矩阵,一个格子上可以放一个车.其中有q个子矩阵,且q个子矩阵互不相交或者是重叠(但边界可以衔接).这q个子矩阵所覆盖的地方都是不能够放车的.车可以越过子矩阵覆盖的地方进行攻击( ...

  10. 用c# 开发html5的尝试,试用bridge.net

    Javascript交叉编译方案很多了,工业级品质的也不是没有,但前两年我从事html5 3d引擎开发时,做过一圈评估,没有可用的. 作为一个c#爱好者,我自然是很希望能最大限度的利用c#的生产力,之 ...