如何在 cocos2d-x 中创建自定义创建函数

How to Create the Custom create function in cocos2d-x

我想更改创建功能 避免使用全局变量。 我想在通话时传递我的价值观(例如分数) 并创建其他场景。我发现的一种方法是 全局变量在创建函数中的使用 但我想在不使用全局的情况下使用这些值 变量。请尽快回复我,我是 cocos2d-x 的新人。 还有告诉我有没有其他方法。

我个人使用这两种方法......所以选择最适合你的!

以这个 ScoreScene class 及其创建方式为例。

1)- 方法一

class ScoreScene : public cocos2d::Layer
{
public:

    static cocos2d::Scene* createScene(bool won, int score) {
        auto scene = Scene::create();
        auto layer = ScoreScene::create(won, score);
        scene->addChild(layer);
        return scene;
    }

    static ScoreScene* create(bool won, int score) {
        ScoreScene *layer = new(std::nothrow) ScoreScene;
        if (layer)
        {
            layer->isWinner = won;
            layer->m_score = score;
            if (layer->init())
            {
                layer->autorelease();
                return layer;
            }
        }
        CC_SAFE_DELETE(layer);
        return nullptr;
    }

    bool init() override {
        if(!layer->init()) return;
        // initialization code here
        return true;
    }

private:

    // your properties
    int m_score;
    bool isWinner;
};

1)- 方法二(个人首选)

只创建一个方法,即 createScene 而不是两个。

class ScoreScene : public cocos2d::Layer
{
public:

    cocos2d::Scene* ScoreScene::createScene(bool won, int score)
    {
        ScoreScene *layer = new(std::nothrow) ScoreScene;
        if (layer)
        {
            layer->isWinner = won;
            layer->m_score = score;
            if (layer->init())
            {
                auto scene = Scene::create();
                layer->autorelease();
                scene->addChild(layer);
                return scene;
            }
        }
        CC_SAFE_DELETE(layer);
        return nullptr;
    }


    bool init() override {
        if(!layer->init()) return;
        // initialization code here
        return true;
    }

private:

    // your properties
    int m_score;
    bool isWinner;
};

我用了同样的方法但是谢谢你的回答..

cocos2d::Scene* GameOverScene::createScene(unsigned int tempscoree)
{
    GameOverScene *pRet = new(std::nothrow) GameOverScene();
    if (pRet && pRet->init(tempscoree))
    {
        auto scene = Scene::create();
        pRet->autorelease();
        scene->addChild(pRet);
        return scene;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }
}


bool GameOverScene::init(unsigned int tempScore)
{
    if ( !Layer::init() )
    {
        return false;
    }
    //Now i can use tempScore any where in to this init() method. 

}