如何在cocos2d-x中创建自定义创建功能

时间:2016-04-11 08:02:04

标签: ios cocos2d-x

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

2 个答案:

答案 0 :(得分:0)

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

以此ScoreScene类为例,以及如何创建它。

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;
};

答案 1 :(得分:0)

我使用了相同的方法但是感谢您回答..

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. 

}