【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2
【麦可网】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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |