博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2dx小技巧 单例
阅读量:6404 次
发布时间:2019-06-23

本文共 1497 字,大约阅读时间需要 4 分钟。

hot3.png

首先来说下什么是单例:  

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。  单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 
上面这段话讲的很严谨,很抽象有木有!没错,你猜对了,它来自百度百科...  下面我用简短、无科学依据的语言组织一下 : 

假如你是个一个男的,但是你私生活不能自理:不会煮饭,洗衣服,穿的衣服永远都no fashion。这时候你需要什么?没错,需要一个女朋友!但这个女朋友你该怎么“使用”呢?给你以下两种选择:  
1、要洗衣服的时候“创建”一个女朋友(也就是去找一个女朋友),洗完后将女朋友甩了;当你要做饭,继续“创建”一个女朋友,做完后甩掉;甚至是当你需要满足某种不可告人的需求时,你需要“创建”一个女朋友...然后..  
2、找一个可以过一辈子的女朋友,永远在一起,你若不离,她便不弃!想怎么用就怎么用,省去了相亲等一系列麻烦!  
以上两种方法虽然都可以让你告别你的右手,但是第一种方法的前提条件太夸张了:你要是一个高富帅,像博主这样的。呵呵。呵呵  
所以,还是选第二种吧,也就是我们所说的单例模式,你想甩也甩不掉。  
好了,言归正传,为什么我们要用单例来设计游戏呢,参考这句话:  
众所周知,游戏开发中离不开游戏数据保存和加载。这些数据包括关卡数据、游戏进行中的状态数据等。这样一些信息很多游戏模块中都需要访问,所以可以为之设置一个单例对象。我武断地认为,客户端游戏开发中,至少需要一个单例对象。因为一个全局的访问点可以方便很多对象之间的交互。 
-----------------------------------------------------  
下面介绍单例的简单使用方法:  
1、声明一个类: 

class TestSingleton : public cocos2d::Layer{public:  static TestSingleton* getInstance();//创建一个全局访问点,例如我们常用的Director::getInstance()就是这样一个单例  void test();//测试单例时用到。private:  static TestSingleton* m_singleton;};

2、定义实现: 

TestSingleton* TestSingleton::m_singleton = nullptr;//m_singleton指向空指针TestSingleton* TestSingleton::getInstance(){  //判断m_singleton是否已被实例化, 如果没有,将之实例  if(nullptr == m_singleton)  {    m_singleton = new TestSingleton();//  }  return m_singleton;}void TestSingleton::test(){  CCLOG("test testSingleton success~~");}

3、测试单例 

我直接在HelloWorld这里测试。代码如下: 

bool HelloWorld::init(){  TestSingleton::getInstance()->test();//调用TestSingleton里的test(),看控制台是否输出success}

很明显是成功的,我就不贴结果啦。

转载于:https://my.oschina.net/u/2276921/blog/537048

你可能感兴趣的文章
YYHS-NOIP模拟赛-gcd
查看>>
JMeter学习使用(1) - 接口GET请求并发测试
查看>>
HDU - 6444 Neko's loop(循环节+最大子段和)
查看>>
使用 Docker 搭建 Java Web 运行环境
查看>>
HDU3709:Balanced Number(数位dp)
查看>>
系统中同时存在python2和python3时 pip有时候更新后会报错 解决安装的方法如下
查看>>
Lightoj 1428 后缀数组
查看>>
RESTful
查看>>
利用DelegatingHandler实现Web Api 的Api key校验
查看>>
jquery扩展插件,让demo元素也可以resize
查看>>
vue directive 常用指令
查看>>
【转载】线性判别分析(Linear Discriminant Analysis)(二)
查看>>
keep learning
查看>>
用mongols轻松打造websocket应用
查看>>
ccf--20131203--最大矩形
查看>>
iOS开发Drag and Drop简介
查看>>
自定义Remote验证(对博客园文章“Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码)”自定义验证的改进)...
查看>>
47、序列化和反序列化
查看>>
可扩展性设计之数据切分
查看>>
图的存储结构(邻接矩阵)
查看>>