单例模式,说的通俗一点就是:创建某个类的全局唯一静态实例对象。也就是说从它创建开始,一直到整个游戏程序结束才会释放资源,期间一直保存的着数据。

单例类在大部分游戏中应该是必不可少的部分,如整个游戏音乐的开关控制、数据的加载与存储等都需要一个全局访问点来控制,那就需要用到单例类了。

【3.x】

shared***() 改为 getInstance() 。

【单例模式】

有一个很形象的比喻,摘自:http://blog.csdn.net/star530/article/details/22610229

假如你是一个男的,但是你私生活不能自理:不会煮饭,洗衣服,穿的衣服永远都no fashion。

这时候你需要什么?没错,需要一个女朋友!但这个女朋友你该怎么“使用”呢?

给你以下两种选择:

(1)要洗衣服的时候“创建”一个女朋友(也就是去找一个女朋友),洗完后将女朋友甩了;

当你要做饭,继续“创建”一个女朋友,做完后甩掉;

甚至是当你需要满足某种不可告人的需求时,你需要“创建”一个女朋友...然后...

(2)找一个可以过一辈子的女朋友,永远在一起,你若不离,她便不弃!

想怎么用就怎么用,省去了相亲等一系列麻烦!

以上两种方法虽然都可以让你告别你的右手,但是第一种方法的前提条件太夸张了:你要是一个高富帅

1、cocos2dx中的单例模式

cocos2dx中其实存在很多的单例类,相信大家也都接触过。

例如:CCDirectorSimpleAudioEngineCCUserDefaultCCSpriteFrameCache等都是用了单例模式,并可以通过shared***()来获取单例对象,如CCDirector::sharedDirector()

2、创建单例类

2.1、声明.h

  1. //
  2. class Global : cocos2d::CCObject {
  3. private:
  4. static Global* m_global; //唯一静态实例对象m_global
  5. public:
  6. static Global* shareGlobal(); //获取全局访问点m_global
  7. //其他属性函数的声明
  8. //......
  9. };
  10. //

2.2、定义实现.cpp

  1. //
  2. //初始化单例唯一实例对象m_global
  3. Global* Global::m_global = NULL;
  4. //获取全局访问点
  5. Global* Global::shareGlobal()
  6. {
  7. //判断m_global是否已被实例化,如果没有,将之实例
  8. if(m_global == NULL) {
  9. m_global = new Global();
  10. }
  11. return m_global;
  12. }
  13. //其他函数的定义实现
  14. //......
  15. //

cocos2dx基础篇(26) 单例模式的更多相关文章

  1. cocos2dx基础篇(3) 常用重要类

    ---------------------------------------- 入口类main.cpp 主要控制类AppDelegate.cpp -------------------------- ...

  2. 【Cocos2d入门教程二】Cocos2d-x基础篇

    上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: a.环境设定(帧率 初始化ope ...

  3. cocos2dx基础篇(23) 粒子系统CCParticleSystem

    [3.x]     (1)去掉"CC"     (2)粒子位置模式 tPositionType 改为强枚举类型 ParticleSystem::PositionType:: // ...

  4. cocos2dx基础篇(22) 基本动画CCAnimation/CCAnimate

    [小知识] CCSpriteFrame     :精灵帧.    它是相对动画而产生的,其实就是一张纹理图片. CCAnimationFrame  :动画帧.    由精灵帧与间隔帧数组成,是动画CC ...

  5. cocos2dx基础篇(18) 数据存储CCUserDefault

    在cocos2dx中提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用.它支持五种数据bool.int.float.double.string的存储. [3.x]     ...

  6. cocos2dx基础篇(15) 列表视图CCTableView

    [3.x] (1)去掉 "CC" (2)TableViewCell 中: > unsigned int getIdx() 返回类型改为 ssize_t(类型为 long) ( ...

  7. cocos2dx基础篇(28) 布景层Layer的三个子类

    [3.x]     (1)去掉 "CC" [CCLayerColor] 颜色布景层CCLayerColor有两个父类:CCLayerRGBA.CCBlendProtocol.相信有 ...

  8. cocos2dx基础篇(27) 屏幕适配

    [3.x]https://blog.csdn.net/qq_40338728/article/details/82964046 [屏幕适配] 1.两个分辨率 1.1.窗口分辨率 在main.cpp中有 ...

  9. cocos2dx基础篇(25) 简单碰撞检测

    [3.x] 将数学类 CCPoint.CCRect 改为v3.x版本的 Vec2.Rect 就好了. [简单碰撞检测] 在一些游戏中经常会遇到碰撞检测的情况,如愤怒的小鸟飞出去后,是否与石头发生碰撞. ...

随机推荐

  1. IPC 进程间通信方式——管道

    进程间通信概述 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到. 通知时间: ...

  2. R语言-程序执行时间

    我们往往对自己编写程序的运行效率十分关心,需要查看程序的执行时间. 在R中,获得时间的函数有不少,比如system.time().proc.time()等. 个人使用较多的是proc.time() & ...

  3. 【leetcode】1234. Replace the Substring for Balanced String

    题目如下: You are given a string containing only 4 kinds of characters 'Q', 'W', 'E' and 'R'. A string i ...

  4. 18-Node.js学习笔记-Express-请求处理-构建模块化路由

    构建模块化路由 const express = require('express') //创建路由对象 const home = express.Router(); //将路由和请求路径进行匹配 ap ...

  5. 需求-java web 能够实现整个文件夹的上传下载吗?

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  6. sh_09_字典的定义

    sh_09_字典的定义 # 字典是一个无序的数据集合,使用print函数输出字典时,通常 # 输出的顺序和定义的顺序是不一致的! xiaoming = {"name": " ...

  7. ar9331修改flash大小和df、cat /proc/mtd的区别

    首先感谢黄工的指导. 在openwrt固件目录下target/linux/ar71xx/image/Makefile,找到对应的机型,修改为4M,8M,16M,32M. 以oolite机型为例,如图所 ...

  8. windows如何正确下载补丁包

    今天公司让给windows安装补丁,打开链接,我蒙蔽了,这么多包要下载哪个腻?下面来跟杨老师一起学习一下如何确定windows版本,下载正确的补丁包. 首先先看一下下载补丁的页面,懵~~ 登录你需要安 ...

  9. Oracle根据列中的特殊符号进行分组

    原数据: 目标结果: 根据-符号将数据进行分组,思路是根据NAME列值进行复制,若为‘-’则赋值1,其他为0,这样就可以根据累加实现分组, 具体实现代码: /* Formatted on 2019/9 ...

  10. plt.plot() 无法使用参数ax

    问题参考 TypeError: inner() got multiple values for keyword argument 'ax' fig, ax=plt.subplots(2,1) plt. ...