【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2D-X场景切换1-3

前端之家收集整理的这篇文章主要介绍了【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2D-X场景切换1-3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

【麦可网】Cocos2d-X跨平台游戏开发---学习笔记

第二十课:Cocos2D-X场景切换1-3

=======================================================================================================================================================================

课程目标:

-Cocos2D-X场景切换

课程重点:

-Cocos2D-X场景堆栈

-Cocos2D-X切换方式

考核目标:

-理解Cocos2D-X场景堆栈

-使用Cocos2D-X场景切换特效

=======================================================================================================================================================================

一、用图层切换画面

  1. void MenuLayerMainMenu::menuCallback2(CCObject* sender)
  2. {
  3. ((CCLayerMultiplex*)m_pParent)->switchTo(2);
  4. }
  5. 其中:
  6. void CCLayerMultiplex::switchTo(unsigned int n)
  7. {
  8. CCAssert( n < m_pLayers->count(),"Invalid index in MultiplexLayer switchTo message" );
  9.  
  10. //删除图层
  11. this->removeChild((CCNode*)m_pLayers->objectAtIndex(m_nEnabledLayer),true);
  12.  
  13. m_nEnabledLayer = n;
  14.  
  15. //添加图层
  16. this->addChild((CCNode*)m_pLayers->objectAtIndex(n));
  17. }


二、用场景切换画面

  1. 场景一:
  2. bool HelloWorld::init()
  3. {
  4. //////////////////////////////
  5. // 1. super init first
  6. if ( !CCLayer::init() )
  7. {
  8. return false;
  9. }
  10.  
  11. CCMenuItemLabel* cocos2dItem = CCMenuItemLabel::create( CCLabelTTF::create("Scence1","Arial",20),this,menu_selector(HelloWorld::menuCloseCallback) );
  12. cocos2dItem->setPosition(ccp(200,200));
  13. CCMenu* menu = CCMenu::createWithItem(cocos2dItem);
  14. menu->setPosition(CCPointZero);
  15. this->addChild(menu);
  16.  
  17. return true;
  18. }
  19.  
  20.  
  21. void HelloWorld::menuCloseCallback(CCObject* pSender)
  22. {
  23. CCScene* scence2 = SCENE2::scene();
  24. CCDirector::sharedDirector()->replaceScene(scence2);
  25. }
  26.  
  27. ------------------------------------------------------------------------
  28. 场景二:
  29. bool SCENE2::init()
  30. {
  31. //////////////////////////////
  32. // 1. super init first
  33. if ( !CCLayer::init() )
  34. {
  35. return false;
  36. }
  37.  
  38. CCMenuItemLabel* cocos2dItem = CCMenuItemLabel::create( CCLabelTTF::create("Scence2",menu_selector(SCENE2::menuCloseCallback) );
  39. cocos2dItem->setPosition(ccp(200,200));
  40. CCMenu* menu = CCMenu::createWithItem(cocos2dItem);
  41. menu->setPosition(CCPointZero);
  42. this->addChild(menu);
  43. return true;
  44. }
  45.  
  46.  
  47. void SCENE2::menuCloseCallback(CCObject* pSender)
  48. {
  49. CCScene* scence1 = HelloWorld::scene();
  50. CCDirector::sharedDirector()->replaceScene(scence1);
  51. }
  52.  
  53. ps:如果在包含头文件的时候出现:无法打开源文件。则表示头文件的位置放置不正确,应放在Class目录下。
  54.  
  55. 切换场景的几个接口:
  56. void CCDirector::replaceScene(CCScene *pScene)
  57. {
  58. CCAssert(m_pRunningScene,"Use runWithScene: instead to start the director");
  59. CCAssert(pScene != NULL,"the scene should not be null");
  60.  
  61. unsigned int index = m_pobScenesStack->count();
  62.  
  63. m_bSendCleanupToScene = true;
  64. m_pobScenesStack->replaceObjectAtIndex(index - 1,pScene);
  65.  
  66. m_pNextScene = pScene;
  67. }
  68.  
  69. ---------------------------------------------------------
  70. void CCDirector::pushScene(CCScene *pScene)
  71. {
  72. CCAssert(pScene,"the scene should not null");
  73.  
  74. m_bSendCleanupToScene = false;
  75.  
  76. m_pobScenesStack->addObject(pScene);
  77. m_pNextScene = pScene;
  78. }
  79.  
  80. ---------------------------------------------------------
  81. void CCDirector::popScene(void)
  82. {
  83. CCAssert(m_pRunningScene != NULL,"running scene should not null");
  84.  
  85. m_pobScenesStack->removeLastObject();
  86. unsigned int c = m_pobScenesStack->count();
  87.  
  88. if (c == 0)
  89. {
  90. end();
  91. }
  92. else
  93. {
  94. m_bSendCleanupToScene = true;
  95. m_pNextScene = (CCScene*)m_pobScenesStack->objectAtIndex(c - 1);
  96. }
  97. }
  98.  
  99. ---------------------------------------------------------
  100. void CCDirector::popToRootScene(void)
  101. {
  102. popToSceneStackLevel(1);
  103. }
  104.  
  105. 给切换的场景添加动画:
  106. void HelloWorld::menuCloseCallback(CCObject* pSender)
  107. {
  108. CCScene* scence2 = SCENE2::scene();
  109. CCScene* tra_scence2 = CCTransitionSlideInB::create(2.0,scence2);
  110. CCDirector::sharedDirector()->replaceScene(tra_scence2);
  111. }
  112.  
  113. ---------------------------------------------------------------
  114. void SCENE2::menuCloseCallback(CCObject* pSender)
  115. {
  116. CCScene* scence1 = HelloWorld::scene();
  117. CCScene* tra_scence1 = CCTransitionMoveInL::create(2.0f,scence1);
  118. CCDirector::sharedDirector()->replaceScene(tra_scence1);
  119. }

===================================================================

总结:

好的切换场景动画,能够提高用户体验。

开心一刻:

何四与邻居发生争执,何四便粗鲁地骂对方:“你是猪!”此事被居民小区治安员知道了,于是要罚何四30元款。

何四接过罚单,很不服气:“上个月我也是骂他是猪,你只罚了我20元嘛。”

“很抱歉,”治安员苦笑一声,“近段猪肉涨价了。”

【麦可网】Cocos2d-X跨平台游戏开发---教程下载:http://pan.baidu.com/s/1kTio1Av

【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu

猜你在找的Cocos2d-x相关文章