場景(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