从面试开始_场景带参初始化

来源:互联网 发布:php软件指的是什么 编辑:程序博客网 时间:2024/05/18 19:40

这里写图片描述
下周一面试。激动紧张忐忑不安。真心希望有人可以收留。


场景和层带参初始化

问:如何实现场景/层的带参初始化?
答:手动实现createScene,create方法。

Class GameLayer:public Layer{public:    static Scene* createScene();    CREATE_FUNC(GameLayer);    virtual bool init();    static Scene* createSceneWithData(int data);    static GameLayer* createWithData(int data);    bool initWithData(int data);}//无参的createScenestatic Scene* createScene(){    Scene* scene=Scene::create();    Layer* layer=GameLayer::create();    Scene->addChild(layer);    return scene;} //来看一下cocos中create的实现#define CREATE_FUNC(__TYPE__) \static __TYPE__* create() \{ \    __TYPE__ *pRet = new(std::nothrow) __TYPE__(); \    if (pRet && pRet->init()) \    { \        pRet->autorelease(); \        return pRet; \    } \    else \    { \        delete pRet; \        pRet = nullptr; \        return nullptr; \    } \}//无参initbool init(){    if(!Layer::init())    {        return false;    }    return true;}//有参的createScenestatic Scene* createSceneWithData(int data){    Scene* scene=Scene::create();    Layer* layer=GameLayer::createWithData(data);    Scene->addChild(layer);    return scene;}/*因为需要将参数传递到初始化函数中,所以不能直接使用CREATE_FUNC创建的create函数,我们需要自己手动编写一个create函数。*///编写create可以根据CREATE_FUNC来写GameLayer* createWithData(int data){    GameLayer* layer=new GameLayer();    if(layer&&layer->initWithData(data))//此处将参数传递给自己实现的init中    {        layer->autorelease();//将其加入自动释放池中,由系统管理        retuen layer;    }    delete layer;    layer=nullptr;    retuen nullptr;}//带参的initbool initWithData(int data){    if(!Lyaer::init())    {        return false;    }    retuen true;}//这样就实现了带参数的初始化//若是此层需要实现单例怎么办?Class GameLayer:public Layer{public:    static Scene* createSceneWithData(int data);    static GameLayer* createWithData(int data);    bool initWithData(int data);    sataic GameLayer* getInstance();privatestatic GameLayer* instance;}//单例初始化在类外GameLayer* GameLayer::instance=nullptr;//获取单例GameLayer* getInstance(){    if(nullptr==instance)    {        instance=GameLayer::create();    }    return instance;}//无参的createScenestatic Scene* createScene(){    Scene* scene=Scene::create();    Layer* layer=GameLayer::getInstance();    Scene->addChild(layer);    return scene;} 
0 0
原创粉丝点击