[Cocos2d-x For WP8]Scene場景

     場景(CCScene) 在遊戲裏,場景就是關卡。 CCScene是app工做流程上獨立塊,一個app可能擁有多個scene,可是在任什麼時候候只能有一個是激活狀態的。一個CCScene對象由一個或多個CCLayer組成,layer之間是先後相連的。Layer提供了scene的外觀和行爲。一般的用法是直接用一個或多個layer實例化一個scene。CCScene的子類CCTrasitionScene實現移動transitions,提供兩個scene之間的轉移效果,因爲scene是CCNode的子類,因此scene能夠手工或者用aciton來轉變座標。全部層和精靈都是他的(子節點)children。app

CCScene的4個基本方法:ide

runWithScene(運行畫面),動畫

replaceScene(替換場景 例如從主菜單進入遊戲界面),this

pushScene(暫停界面),spa

popScene(從暫停的界面還原到遊戲界面)code

示例:對象

class SceneTestLayer1 : public cocos2d::CCLayer
{
public:
    SceneTestLayer1();
    ~SceneTestLayer1();

    virtual void onEnter();
    virtual void onEnterTransitionDidFinish();
    void onPushScene(cocos2d::CCObject* pSender);
    void onPushSceneTran(cocos2d::CCObject* pSender);
} ;

class SceneTestLayer2 : public cocos2d::CCLayer
{
public:
    SceneTestLayer2();
    void onGoBack(cocos2d::CCObject* pSender);
} ;

SceneTestLayer1::SceneTestLayer1()
{
    CCMenuItemFont* item1 = CCMenuItemFont::create( "Test pushScene", this, menu_selector(SceneTestLayer1::onPushScene) );
    CCMenuItemFont* item2 = CCMenuItemFont::create( "Test pushScene w/transition", this, menu_selector(SceneTestLayer1::onPushSceneTran) );
    CCMenu* menu = CCMenu::create( item1, item2, NULL );
    menu->alignItemsVertically();    
    addChild( menu );
}

void SceneTestLayer1::onEnter()
{
    CCLOG("SceneTestLayer1#onEnter");
    CCLayer::onEnter();
}

void SceneTestLayer1::onEnterTransitionDidFinish()
{
    CCLOG("SceneTestLayer1#onEnterTransitionDidFinish");
    CCLayer::onEnterTransitionDidFinish();
}

SceneTestLayer1::~SceneTestLayer1()
{
}

void SceneTestLayer1::onPushScene(CCObject* pSender)
{
    //建立一個新的CCScene來做爲當前的Scene
    CCScene* scene = new CCScene();
    CCLayer* pLayer = new SceneTestLayer2();
    scene->addChild( pLayer, 0 );
    CCDirector::sharedDirector()->pushScene( scene );
    scene->release();
    pLayer->release();
}

void SceneTestLayer1::onPushSceneTran(CCObject* pSender)
{
    //建立一個新的CCScene來做爲當前的Scene
    CCScene* scene = new CCScene();
    CCLayer* pLayer = new SceneTestLayer2();
    scene->addChild( pLayer, 0 );
    //使用動畫效果的切換
    CCDirector::sharedDirector()->pushScene( CCTransitionSlideInT::create(1, scene) );
    scene->release();
    pLayer->release();
}

//------------------------------------------------------------------
//
// SceneTestLayer2
//
//------------------------------------------------------------------

SceneTestLayer2::SceneTestLayer2()
{
    CCMenuItemFont* item = CCMenuItemFont::create( "Go Back", this, menu_selector(SceneTestLayer2::onGoBack) ); 
    CCMenu* menu = CCMenu::create( item, NULL );
    menu->alignItemsVertically(); 
    addChild( menu );
}

void SceneTestLayer2::onGoBack(CCObject* pSender)
{
    //移除
    CCDirector::sharedDirector()->popScene();
}

運行的效果:blog

  

相關文章
相關標籤/搜索