Lab

Cocos2d-x:シーンの切り替え

 Tag :  Published : 2013-12-11

Pocket

replaceSceneを利用します。
シーンからシーンへ、切り替えを行います。

1.下準備:1つ目のシーンの作成

シーン1:数字の1が掲載されたシーン

cocos2d-x シーンの切り替え

シーン2:数字の2が掲載されたシーン

cocos2d-x シーンの切り替え

数字の”1″をクリックするとシーン2へ、数字の”2″をクリックするとシーン1へ切り替わるようにします。

まずはシーン1を作成します。デフォルトのHelloWorldSceneをベースに作成します。

HelloWorldScene.h

class HelloWorld : public cocos2d::CCLayer
{
public:
    virtual bool init();
    static cocos2d::CCScene* scene();
    void menuCloseCallback(CCObject* pSender);

    CREATE_FUNC(HelloWorld);

private:
    void myCallback(CCObject* pSender);
};    
HelloWorldScene.cpp

#include "HelloWorldScene.h"
#include "HelloWorldScene2.h"

CCScene* HelloWorld::scene()
{
    CCScene *scene = CCScene::create();
    HelloWorld *layer = HelloWorld::create();
    scene->addChild(layer);

    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }

    CCSize s = CCDirector::sharedDirector()->getWinSize();
    
    //シーン切り替えのトリガーになる"1"のボタン
    //ボタンをクリックすると、HelloWorld::myCallbackが発動
    CCMenuItemImage *pBtnItem = CCMenuItemImage::create("1.png", "1.png", this, menu_selector(HelloWorld::myCallback));
    CCMenu* pBtn = CCMenu::create(pBtnItem, NULL);
    pBtn->setPosition(ccp(s.width*.5, s.height*.5));
    this->addChild(pBtn);

    return true;
}
    

2.下準備:2つ目のシーンの作成

HelloWorldSceneを複製して、2つ目のシーンHelloWorldScene2を作ります。

HelloWorldScene2.h

class HelloWorld2 : public cocos2d::CCLayer
{
public:
    virtual bool init();
    static cocos2d::CCScene* scene();
    void menuCloseCallback(CCObject* pSender);
    CREATE_FUNC(HelloWorld2);
    
private:
    void myCallback(CCObject* pSender);
};
    
HelloWorldScene2.cpp

CCScene* HelloWorld2::scene()
{
    CCScene *scene = CCScene::create();
    HelloWorld2 *layer = HelloWorld2::create();
    scene->addChild(layer);

    return scene;
}

bool HelloWorld2::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }
    
    CCSize s = CCDirector::sharedDirector()->getWinSize();
    
    //シーン切り替えのトリガーになる"2"のボタン
    //ボタンをクリックすると、HelloWorld2::myCallbackが発動
    CCMenuItemImage *pBtnItem = CCMenuItemImage::create("2.png", "2.png", this, menu_selector(HelloWorld2::myCallback));
    CCMenu* pBtn = CCMenu::create(pBtnItem, NULL);
    pBtn->setPosition(ccp(s.width*.5, s.height*.5));
    this->addChild(pBtn);
    
    return true;
}
    

3.トランジションの設定

HelloWorld::myCallback、HelloWorld2::myCallbackが呼ばれると、シーンが切り替わるようにします。

HelloWorldScene.cpp

//"1"を押したときの関数。
void HelloWorld::myCallback(CCObject* pSender)
{
    //次のシーンとして、HelloWorld2シーンをセット
    CCScene* nextScene = HelloWorld2::scene();
    //切り替えの時間を設定。ここでは1秒
    float duration = 1.0f;
    //フェードイン&フェードアウト(CCTransitionFade)でトランジショーーーン
    CCScene* pScene = CCTransitionFade::create(duration, nextScene);    
    if(pScene){
        CCDirector::sharedDirector()->replaceScene(pScene);
    }
}
    
HelloWorldScene2.cpp

//"2"を押したときの関数。
void HelloWorld2::myCallback(CCObject* pSender)
{
    //次のシーンとして、HelloWorldシーンをセット
    CCScene* nextScene = HelloWorld::scene();
    //切り替えの時間を設定。ここでは1秒
    float duration = 1.0f;
    //フェードイン&フェードアウト(CCTransitionFade)でトランジショーーーン
    CCScene* pScene = CCTransitionFade::create(duration, nextScene);
    if(pScene){
        CCDirector::sharedDirector()->replaceScene(pScene);
    }
}
    

pageTop