paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

他のクラスからAppDelegateにアクセスする

シーン間で共通化しているもの、例えばゲーム画面にアクセスしたい場合、

// AppDelegate.h
#include "cocos2d.h"
USING_NS_CC;

class  AppDelegate : private cocos2d::CCApplication
{
    CCNode *gameNode; // ゲーム画面
    void loadGameNode();
public:
    AppDelegate();
    virtual ~AppDelegate();
    virtual bool applicationDidFinishLaunching();
    virtual void applicationDidEnterBackground();
    virtual void applicationWillEnterForeground();
    
    CCNode* getGameNode();
};
// AppDelegate.cpp

void AppDelegate::loadGameNode()
{
    CCNodeLoaderLibrary* ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
    ccNodeLoaderLibrary->registerCCNodeLoader("GameScene", GameSceneLoader::loader());
    CCBReader* ccbReader = new CCBReader(ccNodeLoaderLibrary);
    gameNode = ccbReader->readNodeGraphFromFile("GameScene.ccbi");
    gameNode->retain(); // 勝手に解放されないようにしてあげる
}

// ゲーム画面を取得する
CCNode* AppDelegate::getGameNode()
{
    return gameNode;
}

以下のような感じでアクセスする。

AppDelegate *appDelegate = (AppDelegate*)CCApplication::sharedApplication();
GameScene* game = appDelegate->getGameNode();

他にもっといい方法があるかもしれない、、、がまあ探り探りってことで。