【唠叨】
单例模式,说的通俗一点就是:创建某个类的全局唯一静态实例对象。也就是说从它创建开始,一直到整个游戏程序结束才会释放资源,期间一直保存的着数据。
单例类在大部分游戏中应该是必不可少的部分,如整个游戏音乐的开关控制、数据的加载与存储等都需要一个全局访问点来控制,那就需要用到单例类了。
【致谢】
http://blog.csdn.net/star530/article/details/22610229
【3.x】
shared***() 改为 getInstance() 。
【单例模式】
有一个很形象的比喻,摘自:http://blog.csdn.net/star530/article/details/22610229
假如你是一个男的,但是你私生活不能自理:不会煮饭,洗衣服,穿的衣服永远都no fashion。
这时候你需要什么?没错,需要一个女朋友!但这个女朋友你该怎么“使用”呢?
给你以下两种选择:
(1)要洗衣服的时候“创建”一个女朋友(也就是去找一个女朋友),洗完后将女朋友甩了;
当你要做饭,继续“创建”一个女朋友,做完后甩掉;
甚至是当你需要满足某种不可告人的需求时,你需要“创建”一个女朋友...然后...
(2)找一个可以过一辈子的女朋友,永远在一起,你若不离,她便不弃!
想怎么用就怎么用,省去了相亲等一系列麻烦!
以上两种方法虽然都可以让你告别你的右手,但是第一种方法的前提条件太夸张了:你要是一个高富帅,像博主这样的,呵呵呵呵。
所以,还是选第二种吧,也就是我们所说的单例模式,你想甩也甩不掉。
1、cocos2dx中的单例模式
cocos2dx中其实存在很多的单例类,相信大家也都接触过。
例如:CCDirector、SimpleAudioEngine、CCUserDefault、CCSpriteFrameCache等都是用了单例模式,并可以通过shared***()来获取单例对象,如CCDirector::sharedDirector()。
2、创建单例类
2.1、声明.h
class Global : cocos2d::CCObject {
private:
static Global* m_global; //唯一静态实例对象m_global
public:
static Global* shareGlobal(); //获取全局访问点m_global
//其他属性函数的声明
//......
};
2.2、定义实现.cpp
//初始化单例唯一实例对象m_global
Global* Global::m_global = NULL;
//获取全局访问点
Global* Global::shareGlobal()
{
//判断m_global是否已被实例化,如果没有,将之实例
if(m_global == NULL) {
m_global = new Global();
}
return m_global;
}
//其他函数的定义实现
//......