ゲーム内のどこからでも使えるシングルトンクラスの作成

どのレイヤー、どのクラスからでも使えるシングルトンクラスを作っておくとなにかと便利です。

今回使用したバージョン

  • Cocos2d-x 3.2

クラス名は"GameManager"とします。

GameManager.h

#include "cocos2d.h"

USING_NS_CC;

// Tag
enum kTag
{
	kTagBackGround = 1,
	
};
// ZOrder
enum kZOrder
{
	kZOrderBackGround = 1,
	
};

class GameManager
{
private:
	GameManager();
	static GameManager* mGameManager;
	
public:
	static GameManager* getInstance();
	
	// ゲーム全体で使用したい変数
	bool soundOn;				// サウンドオン
	
	// 値の初期化
	void initialize();
	
	// メソッド
	// サウンドオンオフの切り替えと記録
	void switchSoundMode();
	// サウンドオンオフの読み込み
	void loadSoundMode();
};

GameManager.cpp

#include "GameManager.h"


GameManager* GameManager::mGameManager = NULL;

GameManager::GameManager()
{
	
}

GameManager* GameManager::getInstance()
{
	if(mGameManager == NULL)
	{
		mGameManager = new GameManager();
		mGameManager->initialize();
	}
	
	return mGameManager;
}

// 値の初期化
void GameManager::initialize()
{
	
}

#pragma mark Music

// サウンドオンオフを切り替える
void GameManager::switchSoundMode()
{
	this->soundOn = !this->soundOn;
	std::string key = StringUtils::format("SoundMode");
	UserDefault *userDefault = UserDefault::getInstance();
	userDefault->setBoolForKey(key.c_str(), this->soundOn);
	userDefault->flush();
}
// サウンドオンオフを読み込む
void GameManager::loadSoundMode()
{
	std::string key = StringUtils::format("SoundMode");
	this->soundOn = UserDefault::getInstance()->getBoolForKey(key.c_str(),true);
}

Spriteなどに設定するTag、ZOrderなどもGameManager上に列挙型で置くようにしています。
私の場合は、ゲームのBGMと効果音を鳴らすかどうかのフラグなども持たせるようにしています。