cocos2dx基础篇(28)——单例模式

【唠叨】

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

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

【致谢】

http://blog.csdn.net/star530/article/details/22610229



【单例模式】

有一个很形象的比喻,摘自: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;
	}

	//其他函数的定义实现
	//......
//
时间: 2024-10-08 03:24:19

cocos2dx基础篇(28)——单例模式的相关文章

cocos2dx基础篇(12)——点九图CCScale9Sprite

[引言] 本来是想学学控件类CCControl的另一个子类按钮控件CCControlButton的.但是发现里面有一个参数牵扯到CCScale9Sprite这个类.看到CCScale9Sprite,很容易联想到精灵类CCSprite.两者又有什么区别呢?因此我就去网上收了一些有关CCScale9Sprite的资料来学习. [参考文献] [1] http://blog.csdn.net/nynyvkhhiiii/article/details/12782249 [2] http://www.cnb

cocos2dx基础篇(7)——菜单按钮CCMenu、CCMenuItem

[本节内容] 菜单按钮在游戏中是经常被用到的,比如主菜单界面的菜单选项,暂停游戏时的菜单选项等等.cocos2dx引擎同样为我们提供了CCMenu菜单的功能,并包含了一些简单的菜单项CCMenuItem.且菜单项附带触碰按钮时,自动放大的效果. 温馨提示:本节内容比较多,需要大家慢慢分析,不要急于求成. 本节组织结构如下: 一.介绍CCMenu. 二.介绍CCMenuItem,及其具体的六个子类. 三.代码实战. [一.菜单CCMenu] 菜单CCMenu是专门用来承载菜单按钮的CCLayer图

cocos2dx基础篇(13)——按钮控件CCControlButton

[引言] 按钮类CCControlButton继承于控件类CCControl. 控件类CCControl主要向子类提供了一系列的控件触发事件.当子控件触发相关的事件后,就会执行相关的控件事件回调函数.这与之前讲的CCMenu中的菜单按钮回调是类似的. 控件类CCControl主要有三个子类: (1)开关控件CCControlSwitch (2)滑块控件CCControlSlider (3)按钮控件CCControlButton 本节讲的是其子类其中之一:按钮类CCControlButton. [

cocos2dx基础篇(4)——浅析cocos2dx引擎目录

通过前面几节的学习,相信大家都已经配置好了VS+cocos2dx2.2.3的环境,并且成功运行了官方的案例HelloWorld. 一.窥探文件目录 要想学好cocos2dx,首先就需要对引擎目录下的各个文件有所了解.接下来,就让我们先来分析一下cocos2dx2.2.3引擎的文件目录吧. 从目录中我们主要了解一下一下几个文件: cocos2dx:cocos2d-x引擎的核心部分,存放了引擎的大部分源文件. CocosDenshion:声音模块相关源文件. Debug.win32:在Windows

cocos2dx基础篇(5)——浅析几个常见类

目录 入口类main.cpp 主要控制类AppDelegate.cpp 节点类CCNode 导演类CCDirector 场景类CCScene 层次类CCLayer 精灵类CCSprite 大小类CCSize 坐标CCPoint 矩形类CCRect 数组类CCArray 入口类main.cpp 这是应用程序的入口类,用于创建cocos2dx的AppDelegate实例.窗口大小.以及运行程序. 主要代码如下:     // create the application instance     A

cocos2dx基础篇(10)——开关按钮CCControlSwitch

[本节内容] 开关类CCControlSwitch继承于控件类CCControl. 控件类CCControl主要向子类提供了一系列的控件触发事件.当子控件触发相关的事件后,就会执行相关的控件事件回调函数.这与之前讲的CCMenu中的菜单按钮回调是类似的. 控件类CCControl主要有三个子类: (1)开关控件CCControlSwitch (2)滑块控件CCControlSlider (3)按钮控件CCControlButton 本节讲的是其子类其中之一:开关类CCControlSwitch.

cocos2dx基础篇(8)——定时器更新schedule、update

[本节内容] 定时器在大部分游戏中是不可或缺的,即每隔一段时间,就要执行相应的刷新体函数,以更新游戏的画面.时间.进度.敌人的指令等等. cocos2dx为我们提供了定时器schedule相关的操作.其操作函数的定义在CCNode中,所以基本上大多数的引擎类都可以设置定时器,如CCLayer.CCSprite.CCMenu等. 定时器更新的方式分为三类: (1)默认定时器:scheduleUpdate(); (2)自定义定时器:schedule(); (3)一次性定时器:scheduleOnce

cocos2dx基础篇(20)——数据存储CCUserDefault

[唠叨] 一个游戏怎么能没有游戏存档呢?在cocos2dx中也提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用. 它支持五种数据bool.int.float.double.string的存储. [致谢] http://gl.paea.cn/contents/252ac3e59bc18069.html [CCUserDefault] CCUserDefault类和之前讲的CCDirector.SimpleAudioEngine一样,都是采用单例模式. 可以通过sha

cocos2dx基础篇(29)——屏幕适配

[唠叨] 手机的屏幕大小千差万别,如现在流行的安卓手机屏幕大部分长宽比例为16:9.而iPhone 5S的长宽比例为71:40(接近16:9),也有预测说iPhone 6S的长宽比例也将会是主流的16:9.另外还有一些平板电脑为4:3.16:10.5:4等等.当然还有一些其他的牌子可能屏幕比例也不一样. 要想让你的程序在各种手机上都能很好的呈现游戏画面,就需要进行屏幕适配. 本节将以下三篇文章进行提炼整合,摘取讲得比较好的段落. [致谢] http://gl.paea.cn/contents/1