【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2D-X场景切换1-3
2015-06-28 12:23
791 查看
【麦可网】Cocos2d-X跨平台游戏开发---学习笔记
第二十课:Cocos2D-X场景切换1-3
=======================================================================================================================================================================
课程目标:
- Cocos2D-X场景切换
课程重点:
- Cocos2D-X场景堆栈
- Cocos2D-X切换方式
考核目标:
- 理解Cocos2D-X场景堆栈
- 使用Cocos2D-X场景切换特效
=======================================================================================================================================================================
===================================================================
总结:
好的切换场景动画,能够提高用户体验。
开心一刻:
何四与邻居发生争执,何四便粗鲁地骂对方:“你是猪!”此事被居民小区治安员知道了,于是要罚何四30元款。
何四接过罚单,很不服气:“上个月我也是骂他是猪,你只罚了我20元嘛。”
“很抱歉,”治安员苦笑一声,“近段猪肉涨价了。”
【麦可网】Cocos2d-X跨平台游戏开发---教程下载:http://pan.baidu.com/s/1kTio1Av
【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu
第二十课: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","Arial",20), this, 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
相关文章推荐
- 2015.6.28开始写博客记录cocos2dx学习历程
- Cocos2d-x3.0 Json解析
- cocos2dx3.6 实现带光标的输入框
- Cocos2d-x制作跳棋第一步: 素材的准备
- cocos2d-js中的一些语法问题
- cocos2dx 场景间正向反向传
- 非常好的ubuntu搭建cocos2d环境
- cocos2d-x Lua引擎安装步骤
- 【Cocos游戏实战】功夫小子第五课之帮助场景和选关功能的实现
- cocos2dx基础篇(23)——进度条CCProgressTimer
- cocos2d-x3.6 连连看连通画线
- 【Cocos2d-x 3.2】裁剪节点(ClippingNode)总结
- Cocos2d-x在Android在竖屏切换
- cocos2dx番外篇——更换精灵图片
- cocos2dx lua学习笔记 <一> quick 3.5把自定义C++类绑定到lua
- cocos2d-x 坐标研究
- cocos2dx中关于场景的管理
- How To: Integrate AdMob with Cocos2D-x Windows Phone 8 Project
- cocos2d-x创建新工程
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十九课:Cocos2D-X粒子系统1-3