Cocos2d-xでシングルトンによる画面間データ連携

  • 33
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

やっとできたので共有しておきます♪

参考記事
Cocos2d-xでシングルトンによる画面間データ連携
http://xcode555.sblo.jp/article/62645292.html
(この時点では.cppが貼り間違いでした…)

Singleton in cocos2d-x Android
http://stackoverflow.com/questions/9434436/singleton-in-cocos2d-x-android

GameManager.h
//
//  GameManager.h
//  SingletonTEST
//
//  Created by prototechno on 2013/02/20.
//
//

#ifndef __SingletonTEST__GameManager__
#define __SingletonTEST__GameManager__

typedef enum{
    GameModeMenu ,
    GameModeNagasa ,
    GameModeKasa ,
}GameMode;

#include "cocos2d.h"

class GameManager
{
private:
    GameManager();
    static GameManager* m_mySingleton;

public:
    static GameManager* sharedGameManager();

    GameMode gameMode;

    int count;

    float gameTime;

};

#endif /* defined(__SingletonTEST__GameManager__) */
GameManager.cpp
//
//  GameManager.cpp
//  SingletonTEST
//
//  Created by prototechno on 2013/02/20.
//
//
#include "SimpleAudioEngine.h"
#include "GameManager.h"

using namespace cocos2d;
using namespace CocosDenshion;

//All static variables need to be defined in the .cpp file
//I've added this following line to fix the problem
GameManager* GameManager::m_mySingleton = NULL;

GameManager::GameManager()
{

}

GameManager* GameManager::sharedGameManager()
{
    //If the singleton has no instance yet, create one
    if(NULL == m_mySingleton)
    {
        //Create an instance to the singleton
        m_mySingleton = new GameManager();
    }

    //Return the singleton object
    return m_mySingleton;
}

使い方はこんな感じ… gameTimeでタイマーを実装した時の記録。

sample.cpp

#include "GameManager.h"

void Play5::countTimer(float time)
{
    GameManager::sharedGameManager()->gameTime += time;

    //時間を表示する
    CCString* timeString = CCString::createWithFormat("%8.0f秒", GameManager::sharedGameManager()->gameTime);
    CCLabelTTF* timerLabel = (CCLabelTTF*)this->getChildByTag(kTagTimerLabel);
    timerLabel->setString(timeString->getCString());
}