我有一個名爲GameManager的單身人員課程。更改爲其他場景時丟失單身人員課程的數據
GameManager.h
#include "cocos2d.h"
using namespace cocos2d;
class GameManager : private CCObject
{
public:
GameManager(void);
virtual ~GameManager(void);
virtual bool init(void);
static GameManager* sharedGameManager(void);
CC_SYNTHESIZE(CCString*, email, Email);
CC_SYNTHESIZE(CCString*, nickName, NickName);
CC_SYNTHESIZE(int, currentGame, CurrentGame);
CCArray* gamesArray;
};
GameManager.cpp
#include "GameManager.h"
static GameManager* _sharedGameManager = NULL;
GameManager* GameManager::sharedGameManager(void)
{
if (!_sharedGameManager)
{
_sharedGameManager = new GameManager;
_sharedGameManager->init();
}
return _sharedGameManager;
}
GameManager::GameManager(void)
{
}
GameManager::~GameManager(void)
{
email->release();
nickName->release();
gamesArray->release();
}
bool GameManager::init()
{
CCLOG("GameManager Created");
email = CCString::create("");
email->retain();
nickName = CCString::create("");
nickName->retain();
currentGame = 0;
gamesArray = CCArray::create();
gamesArray->retain();
return true;
}
和我在登錄頁面創建遊戲管理與
GameManager::sharedGameManager();
我的應用程序流走向:
Login.cpp - > GameList.cpp - > GameScreen.cpp
在我店這是該頁面中創建的帳戶的電子郵件和暱稱,也是gamesArray登錄頁面:
//store user info to gamemanager
GameManager::sharedGameManager()->setEmail((CCString*) parseOne->objectAtIndex(3));
GameManager::sharedGameManager()->setNickName((CCString*) parseOne->objectAtIndex(7));
GameManager::sharedGameManager()->gamesArray = gameObjectArray;
一旦用戶登錄,遊戲列表是使用GameManager信息創建的。
所以來自單身人士的信息存在於這一點上。
GameList頁面爲gamesArray中的每個遊戲創建一個GameObject。每個遊戲物體連接到它的子鍵是用來轉到了GameScreen並能節省GameObjects ID的遊戲管理
GameManager::sharedGameManager()->setCurrentGame(gameNumber);
CCDirector * pDirector = CCDirector::sharedDirector();
CCScene* pScene = GameScreenScene::scene();
pDirector->replaceScene(pScene);
現在怪異的一部分,當我到了GameScreenScene從遊戲管理器中的數據就沒了,除了目前遊戲仍然顯示正確的值。
我已經把一些日誌來診斷問題,但我似乎無法弄清楚。
我可以在GameListScene更改爲GameScreenScene之前讀取值,但一旦它改變,值就會消失。
我也嘗試讀取GameObject按鈕調用中的數據,但數據在那裏也不存在。
我可以添加更多的代碼,如果它可以幫助解決這個問題,我只是不想洪水這個,如果它是一件容易的事情。
任何幫助都會很棒。
如果你真的希望它是一個有保證的單例,你應該使構造函數是私有的,所以唯一的構造路徑是'sharedGameManager()'方法。將_sharedGameManager指針作爲私有靜態成員移動到類中也可能會有幫助。 – Charlie
感謝您的評論,但這似乎沒有解決任何問題。 –