cocos2dx基础篇(28)——单例模式-创新互联

【唠叨】

创新互联长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为西畴企业提供专业的成都网站设计、成都网站制作,西畴网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

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

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

【致谢】

    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中其实存在很多的单例类,相信大家也都接触过。

    例如:CCDirectorSimpleAudioEngineCCUserDefaultCCSpriteFrameCache等都是用了单例模式,并可以通过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;
	}

	//其他函数的定义实现
	//......
//

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:cocos2dx基础篇(28)——单例模式-创新互联
文章位置:http://pwwzsj.com/article/ceoshh.html