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を作成します
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 が作成されます。
したがって、シングルトンからの情報はこの時点で存在します。
GameList ページは、gamesArray 内の各ゲームの GameObject を作成します。各 GameObject には、GameScreen に移動し、その GameObjects id を GameManager に保存するために使用される子ボタンが関連付けられています。
GameManager::sharedGameManager()->setCurrentGame(gameNumber);
CCDirector * pDirector = CCDirector::sharedDirector();
CCScene* pScene = GameScreenScene::scene();
pDirector->replaceScene(pScene);
奇妙なことに、GameScreenScene に到達すると、正しい値を表示している currentGame を除いて、GameManager からのデータが失われます。
問題を診断するためにいくつかのログを入力しましたが、理解できないようです。
GameListScene が GameScreenScene に変更される直前に値を読み取ることができますが、変更されると値は失われます。
ゲームオブジェクトのボタン呼び出しでもデータを読み込んでみましたが、そこにもデータが存在しません。
これを理解するのに役立つ場合は、さらにコードを追加できます。簡単なものであれば、これをフラッディングしたくありませんでした。
どんな助けでも素晴らしいでしょう。