Cocos2dx C++单例方法实现

引擎内部使用的方法:

CCFileUtils.h

class CC_DLL FileUtils
{
public:
    /**
     *  Gets the instance of FileUtils.
     */
    static FileUtils* getInstance();

    /**
     *  Destroys the instance of FileUtils.
     */
    static void destroyInstance();
}

CCFileUtils-win32.cpp
 

FileUtils* FileUtils::s_sharedFileUtils = nullptr;

FileUtils* FileUtils::getInstance()
{
    if (s_sharedFileUtils == nullptr)
    {
        s_sharedFileUtils = new FileUtilsWin32();
        if(!s_sharedFileUtils->init())
        {
          delete s_sharedFileUtils;
          s_sharedFileUtils = nullptr;
          CCLOG("ERROR: Could not init CCFileUtilsWin32");
        }
    }
    return s_sharedFileUtils;
}

我自己写的:

方法一:调用getInstance方法时才有可能生成新对象

注:多线程可能有bug,不过看引擎内部很多都是这样实现的,应该也没什么问题。

GameScene.h

class GameScene:public Layer
{
//把构造函数与析构函数设为私有类型的原因是因为我们希望使用单例模式,以此减少资源开支
private:
	GameScene();
	//析构函数设置为虚函数的目的我们希望在继承的时候子类重载
	virtual ~GameScene();
	static GameScene* _instance;

public:
	//对外提供的获取本类单例的接口
	static GameScene* getInstance();
}

GameScene.cpp

GameScene::GameScene()
{

}

GameScene::~GameScene()
{

}

GameScene* GameScene::_instance=nullptr;

GameScene* GameScene::getInstance()
{
	if (_instance)
	{
		return _instance;
	}
	_instance = new GameScene;
	return _instance;
}

 

方法二:编译时就生成一个新对象,调用getInstance方法时直接返回对象。

推荐使用这种方法,安全简单。

CloseMenu.h

class CloseMenu
{
public:
	static CloseMenu* getInstance();
private:
	static CloseMenu* instance;
	CloseMenu();
	~CloseMenu();
};

CloseMenu.cpp

CloseMenu* CloseMenu::instance = new CloseMenu;

CloseMenu* CloseMenu::getInstance()
{
	return instance;
}

CloseMenu::CloseMenu()
{
}


CloseMenu::~CloseMenu()
{
}

 

《Cocos2d-x实战:C++卷》[1] 系统论述了Cocos2d-x游戏开发理论与实践。全书内容涵盖了Cocos2d-x的核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、数据交换格式、内存管理、性能优化、平台移植、程序代码管理、三大应用商店发布产品等。本书共29章,按内容结构可分为六篇: 第一篇开发基础,即第2章~第8章,内容包括Cocos2d-x简介、环境搭建、字符串、标签、菜单、精灵、场景、层、动作、特效、动画和Cocos2d-x用户事件。 第二篇开发进阶,即第9章~第12章,内容包括游戏音乐与音效、粒子系统、瓦片地图和物理引擎。 第三篇数据与网络,即第13章~第17章,内容包括Cocos2d-x中使用的数据容器类、数据持久化、数据交换格式、基于HTTP网络通信和基于Node.js的Socket.IO网络通信。 第四篇设计与优化,即第18章~第20章,内容包括Cocos2d-x中的常用设计模式、Cocos2d-x中的内存管理和性能优化。 第五篇平台移植,即第21章~第23章,内容包括从Win32到Android平台的移植、从Win32到WindowsPhone8平台的移植和从Win32到iOS平台的移植。 第六篇开发实战,即第24章~第29章,内容包括使用Git管理程序代码和多个项目实战——迷失航线手机游戏项目开发、为迷失航线游戏添加广告、发布放到Googleplay应用商店、发布放到WindowsPhone应用商店和发布放到苹果AppStore。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

COCO56(徐可可)

建议微信红包:xucoco56

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值