前言

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

普通单例_饿汉模式

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

 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. Linux查看当前目录下所有子目录是否包含某个文件

    在Linux下,当需要找某个文件但又不知道这个文件在哪个具体的目录下,这时可以使用全目录查找 使用find命令: find . -type f -name "job_21_output*&q ...

  2. CTeX入门出坑

    终于出了入门坑.大致风格可以了.赶紧记下来. \documentclass{ctexbook} \usepackage{amsmath} \usepackage{amsfonts} \usepacka ...

  3. fillder---断言,更改提交数据

    1.before requests:请求的发送前拦截,此时可以修改提交的表单.cookies.header头数据 在URL请求前,设置为before requests 2.after response ...

  4. el内部支持运算表达式,外部不支持

    el内部支持运算表达式 如"${pageBean.currentPage==1}" "${pageBean.currentPage+1}"........ 外部 ...

  5. 2018-2019-1 20189201《Linux内核原理与分析》第三周作业

    写作业之前,写了时光博物馆参观感受.1978-2018 40年的改革开放历程. 一.C语言中内嵌汇编语言的写法 内嵌汇编的语法如下: asm volatile ( 汇编语句模版: 输出部分: 输入部分 ...

  6. python 3 实现文件下载的方法总结

    新学的python,兴奋不已,于是网上各种资源各种爬,发现对于同样文件下载,各个下载方法的速度是不一样的(目前就知道两种方法下载#尴尬) 下面分别看下吧: 下载同样的图片,方法二的速度是方法一的二倍 ...

  7. with(window) onload=onresize=function(){} 写法

    with(window) onload=onresize=function(){} 写法 with的用法: with(对象A) { 语句块 } 语句块中可以直接使用 对象A中的属性和方法 ------ ...

  8. 转 MYSQL InnoDB Record, Gap, and Next-Key Locks

    http://dev.mysql.com/doc/refman/5.0/en/innodb-record-level-locks.html InnoDB has several types of re ...

  9. DAG---矩阵嵌套问题

    矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c, ...

  10. php 5.6,7.0静态方法调用和new调用方法性能差距

    windows7 64 机器I5 8G内存,128G SSD 吐槽一下,win10内存的消耗,真的可怕 测试代码 class staticTest { public function test() { ...