読者です 読者をやめる 読者になる 読者になる

cocos2d-xでシーンを切り替える

概要

  • タイトル、ゲームメニュー、ゲームのように複数シーンの時の切り替え処理を作る

シーンクラス追加

  • 新規でシーンクラスを作る
    • メニューと選択物は下記画像参照

f:id:kambayashi:20120818153311p:plainf:id:kambayashi:20120818153320p:plain

背景画像用意

f:id:kambayashi:20120818160001p:plain

  • TitleSceneで読み込んでる背景画像名を変更する

TitleScene.cpp

    // add "HelloWorld" splash screen"
    CCSprite* pSprite = CCSprite::create("title_back.png");

起動時のシーンをタイトルシーンにする

  • AppDelegate.cppのrunWithSceneの引数をTItleSceneのオブジェクトにする

AppDelegate.cpp

    // create a scene. it's an autorelease object
    CCScene *pScene = Title::scene();
  • とりあえずここまでで動かす

f:id:kambayashi:20120818160509p:plain

タイトルシーンから次のシーンに行くボタンをつける

  • とりあえずなんかボタン押したらcocos2d-xの画面が出るようにする
    • ボタン作成とコールバックはHelloWorldから持ってくる

TitleScene.h

    // a selector callback
    void menuChangeScene(CCObject* pSender);

TitleScene.cpp:ボタン作成

    /////////////////////////////
    // 2. add a menu item with change scene
    CCMenuItemImage *pChangeSceneItem = CCMenuItemImage::create(
                                                                "CloseNormal.png",
                                                                "CloseSelected.png",
                                                                this,
                                                                menu_selector(Title::menuChangeScene) );
    pChangeSceneItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
    
    // create menu, it's an autorelease object
    CCMenu* pMenu = CCMenu::create(pChangeSceneItem, NULL);
    pMenu->setPosition( CCPointZero );
    this->addChild(pMenu, 1);

TitleScene.cpp:ボタンのコールバック

void Title::menuChangeScene(CCObject *pSender)
{
    CCDirector::sharedDirector()->replaceScene( HelloWorld::scene());
}

動かす

  • 最初にタイトルが出てボタンを押すとcocos2d-xのマスコットの画面が出る

f:id:kambayashi:20120818162747p:plainf:id:kambayashi:20120818162751p:plain