从面试开始

    xiaoxiao2021-12-14  17

    下周一面试。激动紧张忐忑不安。真心希望有人可以收留。


    场景和层带参初始化

    问:如何实现场景/层的带参初始化? 答:手动实现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); } //无参的createScene static 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; \ } \ } //无参init bool init() { if(!Layer::init()) { return false; } return true; } //有参的createScene static 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; } //带参的init bool 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; } //无参的createScene static Scene* createScene() { Scene* scene=Scene::create(); Layer* layer=GameLayer::getInstance(); Scene->addChild(layer); return scene; }
    转载请注明原文地址: https://ju.6miu.com/read-970632.html

    最新回复(0)