【麦可网】Cocos2d-X跨平台游戏开发---学习笔记
第二十课:Cocos2D-X场景切换1-3
=======================================================================================================================================================================
课程目标:
-Cocos2D-X场景切换
课程重点:
-Cocos2D-X场景堆栈
-Cocos2D-X切换方式
考核目标:
-理解Cocos2D-X场景堆栈
-使用Cocos2D-X场景切换特效
=======================================================================================================================================================================
一、用图层切换画面
void MenuLayerMainMenu::menuCallback2(CCObject* sender) { ((CCLayerMultiplex*)m_pParent)->switchTo(2); } 其中: void CCLayerMultiplex::switchTo(unsigned int n) { CCAssert( n < m_pLayers->count(),"Invalid index in MultiplexLayer switchTo message" ); //删除图层 this->removeChild((CCNode*)m_pLayers->objectAtIndex(m_nEnabledLayer),true); m_nEnabledLayer = n; //添加图层 this->addChild((CCNode*)m_pLayers->objectAtIndex(n)); }
二、用场景切换画面
场景一: bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCMenuItemLabel* cocos2dItem = CCMenuItemLabel::create( CCLabelTTF::create("Scence1","Arial",20),this,menu_selector(HelloWorld::menuCloseCallback) ); cocos2dItem->setPosition(ccp(200,200)); CCMenu* menu = CCMenu::createWithItem(cocos2dItem); menu->setPosition(CCPointZero); this->addChild(menu); return true; } void HelloWorld::menuCloseCallback(CCObject* pSender) { CCScene* scence2 = SCENE2::scene(); CCDirector::sharedDirector()->replaceScene(scence2); } ------------------------------------------------------------------------ 场景二: bool SCENE2::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCMenuItemLabel* cocos2dItem = CCMenuItemLabel::create( CCLabelTTF::create("Scence2",menu_selector(SCENE2::menuCloseCallback) ); cocos2dItem->setPosition(ccp(200,200)); CCMenu* menu = CCMenu::createWithItem(cocos2dItem); menu->setPosition(CCPointZero); this->addChild(menu); return true; } void SCENE2::menuCloseCallback(CCObject* pSender) { CCScene* scence1 = HelloWorld::scene(); CCDirector::sharedDirector()->replaceScene(scence1); } ps:如果在包含头文件的时候出现:无法打开源文件。则表示头文件的位置放置不正确,应放在Class目录下。 切换场景的几个接口: void CCDirector::replaceScene(CCScene *pScene) { CCAssert(m_pRunningScene,"Use runWithScene: instead to start the director"); CCAssert(pScene != NULL,"the scene should not be null"); unsigned int index = m_pobScenesStack->count(); m_bSendCleanupToScene = true; m_pobScenesStack->replaceObjectAtIndex(index - 1,pScene); m_pNextScene = pScene; } --------------------------------------------------------- void CCDirector::pushScene(CCScene *pScene) { CCAssert(pScene,"the scene should not null"); m_bSendCleanupToScene = false; m_pobScenesStack->addObject(pScene); m_pNextScene = pScene; } --------------------------------------------------------- void CCDirector::popScene(void) { CCAssert(m_pRunningScene != NULL,"running scene should not null"); m_pobScenesStack->removeLastObject(); unsigned int c = m_pobScenesStack->count(); if (c == 0) { end(); } else { m_bSendCleanupToScene = true; m_pNextScene = (CCScene*)m_pobScenesStack->objectAtIndex(c - 1); } } --------------------------------------------------------- void CCDirector::popToRootScene(void) { popToSceneStackLevel(1); } 给切换的场景添加动画: void HelloWorld::menuCloseCallback(CCObject* pSender) { CCScene* scence2 = SCENE2::scene(); CCScene* tra_scence2 = CCTransitionSlideInB::create(2.0,scence2); CCDirector::sharedDirector()->replaceScene(tra_scence2); } --------------------------------------------------------------- void SCENE2::menuCloseCallback(CCObject* pSender) { CCScene* scence1 = HelloWorld::scene(); CCScene* tra_scence1 = CCTransitionMoveInL::create(2.0f,scence1); CCDirector::sharedDirector()->replaceScene(tra_scence1); }
===================================================================
总结:
好的切换场景动画,能够提高用户体验。
开心一刻:
何四与邻居发生争执,何四便粗鲁地骂对方:“你是猪!”此事被居民小区治安员知道了,于是要罚何四30元款。
何四接过罚单,很不服气:“上个月我也是骂他是猪,你只罚了我20元嘛。”
“很抱歉,”治安员苦笑一声,“近段猪肉涨价了。”
【麦可网】Cocos2d-X跨平台游戏开发---教程下载:http://pan.baidu.com/s/1kTio1Av
【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu