zoukankan      html  css  js  c++  java
  • cocos2dx基础篇(26) 单例模式

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

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

    【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;
    	}
    
    	//其他函数的定义实现
    	//......
    //
  • 相关阅读:
    Educational Codeforces Round 6
    Educational Codeforces Round 5
    [Educational Round 5][Codeforces 616F. Expensive Strings]
    [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]
    Codeforces Round #509 (Div. 2)
    从零开始编写一个vue插件
    Web前端错题模糊题记录
    vue中响应式props办法
    vue中router-link的click事件失效的解决办法
    ubuntu修改顶栏颜色
  • 原文地址:https://www.cnblogs.com/lmx282110xxx/p/10798703.html
Copyright © 2011-2022 走看看