2016-04-11 19 views
-1

グローバル変数の使用を避けるために、作成機能 を変更したいと思います。 を呼び出して他のシーンを作成している間に値(例:スコア)を渡したいとします。私が見つけた1つの方法は、 グローバル変数を使用して、関数 を作成しましたが、グローバル変数 を使用せずにこれらの値を使用したいと考えています。早く返信してください。私はcocos2d-xの新機能です。 また、他の方法があるかどうか教えてください。cocos2d-xでカスタム作成機能を作成する方法

答えて

0

私は個人的にこれらの2つのアプローチを使用しています...だから、最もフィットするものを選んでください!

たとえば、このScoreSceneクラスとその作成方法をとります。

1) - 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の代わりに2であるただ一つの方法を行う)は、2つの(個人好適に近づきます。

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

...同じアプローチしかし、答えるために感謝を使用。ジョセフありがとう。私は同じアプローチを見つけました。 –

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. 

} 
関連する問題