今天将曾经写的代码和项目集成到了一个菜单中,能够通过菜单切换到曾经做的项目

程序的project文件夹

主要代码分析:

LessonMenu.h中实现创建菜单,遍历菜单通过菜单切换到各个项目

  1. #ifndef _LessonMenu_H_
  2. #define _LessonMenu_H_
  3.  
  4. #include "cocos2d.h"
  5. USING_NS_CC;
  6.  
  7. class LessonMenu : public CCLayer
  8. {
  9. public:
  10. bool init();
  11.  
  12. static CCScene* scene();
  13.  
  14. void EnterLasson(CCObject* sender);
  15.  
  16. //处理触摸事件
  17. bool ccTouchBegan(CCTouch*,CCEvent);
  18. void ccTouchMoved(CCTouch*, CCEvent*);
  19.  
  20. CREATE_FUNC(LessonMenu);
  21. };
  22.  
  23. #endif

LessonMenu.cpp中实现详细的功能

  1. #include "LessonMenu.h"
  2. #include"Label.h"
  3. #include"MenuItem.h"
  4. #include"TextFieldTTF.h"
  5. #include"AppMacros.h"
  6. #include"LabelAtlas.h"
  7. #include"SceneSecond.h"
  8. #include"TextFieldTTF1.h"
  9. #include"BMFont.h"
  10. #include"Layer.h"
  11. #include"Sprite.h"
  12. #include"Zorder.h"
  13. #include"Coord.h"
  14. #include"Sprite1.h"
  15. #include"TCCEditBox.h"
  16. #include"Menu.h"
  17. #include "MenuContinus.h"
  18. #include "T14SwitchControl.h"
  19. #include "T15Slider.h"
  20.  
  21. CCScene* LessonMenu::scene()
  22. {
  23. CCScene* s = CCScene::create();
  24.  
  25. LessonMenu* layer = LessonMenu::create();
  26.  
  27. s->addChild(layer);
  28.  
  29. return s;
  30. }
  31.  
  32. //保存创建的cpp文件
  33. static const char* lessons[] =
  34. {
  35. "BMFont.cpp",
  36. "Coord.cpp",
  37. "Label.cpp",
  38. "LabelAtlas.cpp",
  39. "Layer.cpp",
  40. "Menu.cpp",
  41. "MenuItem.cpp",
  42. "SceneSecond.cpp",
  43. "Sprite.cpp",
  44. "Sprite1.cpp",
  45. "TCCEditBox.cpp",
  46. "TextFieldTTF.cpp",
  47. "TextFieldTTF1.cpp",
  48. "Zorder.cpp",
  49. "MenuContinus.cpp",
  50. "T14SwitchControl.cpp",
  51. "T15Slider.cpp"
  52. };
  53.  
  54. bool LessonMenu::init()
  55. {
  56. CCLayer::create();
  57.  
  58. //创建菜单
  59. CCMenu* menu = CCMenu::create();
  60. addChild(menu);
  61.  
  62. for(int i = 0; i < sizeof(lessons)/sizeof(*lessons); i++)
  63. {
  64. //创建菜单项
  65. CCMenuItemFont* item = CCMenuItemFont::create(lessons[i]);
  66. menu->addChild(item);
  67.  
  68. //设置处理函数
  69. item->setTarget(this, menu_selector(LessonMenu::EnterLasson));
  70.  
  71. //设置菜单项的ID
  72. item->setTag(10000 + i);
  73. }
  74.  
  75. //对齐菜单项
  76. menu->alignItemsVertically();
  77.  
  78. //触摸菜单项
  79. setTouchEnabled(true);
  80. setTouchMode(kCCTouchesOneByOne);
  81.  
  82. return true;
  83. }
  84.  
  85. void LessonMenu::EnterLasson(CCObject* sender)
  86. {
  87. //强制类型转换
  88. CCMenuItem* item = dynamic_cast<CCMenuItem*>(sender);
  89.  
  90. //得到菜单项的ID
  91. int tag = item->getTag() - 10000;
  92.  
  93. //用于调用场景
  94. CCScene* scene = NULL;
  95.  
  96. switch(tag)
  97. {
  98. case 0:
  99. {
  100. scene = BMFont::scene();
  101. }
  102. break;
  103.  
  104. case 1:
  105. {
  106. scene = Coord::scene();
  107. }
  108. break;
  109.  
  110. case 2:
  111. {
  112. scene = Label::scene();
  113. }
  114. break;
  115.  
  116. case 3:
  117. {
  118. scene = LabelAtlas::scene();
  119. }
  120. break;
  121.  
  122. case 4:
  123. {
  124. scene = Layer::scene();
  125. }
  126. break;
  127.  
  128. case 5:
  129. {
  130. scene = Menu::scene();
  131. }
  132. break;
  133.  
  134. case 6:
  135. {
  136. scene = MenuItem::scene();
  137. }
  138. break;
  139.  
  140. case 7:
  141. {
  142. scene = SceneSecond::scene();
  143. }
  144. break;
  145.  
  146. case 8:
  147. {
  148. scene = Sprite::scene();
  149. }
  150. break;
  151.  
  152. case 9:
  153. {
  154. scene = Sprite1::scene();
  155. }
  156. break;
  157.  
  158. case 10:
  159. {
  160. scene = TCCEditBox::scene();
  161. }
  162. break;
  163.  
  164. case 11:
  165. {
  166. scene = TextFieldTTF::scene();
  167. }
  168. break;
  169.  
  170. case 12:
  171. {
  172. scene = TextFieldTTF1::scene();
  173. }
  174. break;
  175.  
  176. case 13:
  177. {
  178. scene = Zorder::scene();
  179. }
  180. break;
  181.  
  182. case 14:
  183. {
  184. scene = MenuContinus::scene();
  185. }
  186. break;
  187.  
  188. case 15:
  189. {
  190. scene = T14SwitchControl::scene();
  191. }
  192. break;
  193.  
  194. case 16:
  195. {
  196. scene = T15Slider::scene();
  197. }
  198. break;
  199. }
  200.  
  201. if(scene)
  202. {
  203. CCDirector::sharedDirector()->pushScene(scene);
  204. }
  205. }
  206.  
  207. //处理触摸事件
  208. bool LessonMenu::ccTouchBegan(CCTouch* touch,CCEvent)
  209. {
  210. return true;
  211. }
  212.  
  213. //处理触摸事件
  214. void LessonMenu::ccTouchMoved(CCTouch* touch, CCEvent*)
  215. {
  216. // 获得触摸移动的距
  217. CCPoint ptDelta = touch->getDelta();
  218.  
  219. // 仅仅上下滑动的方法
  220. setPositionY(getPositionY() + ptDelta.y);
  221. }

LayerBack.h实现创建一个仅仅有一个返回button的层,通过返回button实现场景切换

  1. #ifndef _LayerBack_H_
  2. #define _LayerBack_H_
  3.  
  4. #include "cocos2d.h"
  5. USING_NS_CC;
  6.  
  7. class LayerBack : public CCLayer
  8. {
  9. public:
  10. bool init();
  11.  
  12. void back(CCObject*);
  13. };
  14.  
  15. #endif

LayerBack.cpp中是详细实现的代码

  1. #include "LayerBack.h"
  2.  
  3. bool LayerBack::init()
  4. {
  5. CCLayer::init();
  6.  
  7. //得到窗体的尺寸
  8. CCSize winSize = CCDirector::sharedDirector()->getWinSize();
  9.  
  10. CCMenu* menu = CCMenu::create();
  11. addChild(menu);
  12.  
  13. CCMenuItem* backItem = CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png",
  14. this, menu_selector(LayerBack::back));
  15.  
  16. menu->addChild(backItem);
  17.  
  18. //设置菜单项的位置(将菜单项设置到右下角)
  19. backItem->setPosition(ccp(winSize.width / 2 - backItem->getContentSize().width / 2,
  20. backItem->getContentSize().height / 2 - winSize.height / 2));
  21.  
  22. return true;
  23. }
  24.  
  25. void LayerBack::back(CCObject*)
  26. {
  27. //场景切换
  28. CCDirector::sharedDirector()->popScene();
  29. }

运行结果:



Cocos2d-X中Menu的综合运用的更多相关文章

  1. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  2. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  3. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. android工程中menu的使用总结

    android的Menu使用 转自:thinkYeah的博客 1.普通的Menu 先来看看最简单的Menu怎样实现. 在主Activity中覆盖onCreateOptionsMenu(Menu men ...

  5. Android(java)学习笔记196:Android中Menu的使用(静态和动态)

    1.使用xml定义Menu(静态方法) 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于 ...

  6. Android中Menu的基本用法

    一. 使用xml定义Menu 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单项 ...

  7. android中menu菜单的简单使用

    我认为menu用起来简洁方便,特别是在一些大一点的程序中我们早就厌烦了一遍遍的加button,设置了菜单可谓是事半功倍,简单省事. <1>先声明定义下你的menu: private sta ...

  8. Activity中Menu相关的几个方法的调用时机

    用于创建菜单的常用的方法有如下两种: 1.onCreateOptionsMenu(Menu menu) 2.onPrepareOptionsMenu(Menu menu) MyDiaryActivit ...

  9. Android中Menu的基本使用方法

    一. 使用xml定义Menu 菜单资源文件必须放在res/menu文件夹中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单 ...

随机推荐

  1. HDU 3486 Interviewe RMQ

    题意: 将\(n\)个数分成\(m\)段相邻区间,每段区间的长度为\(\left \lfloor \frac{n}{m} \right \rfloor\),从每段区间选一个最大值,要让所有的最大值之和 ...

  2. 《小团团团队》【Alpha】Scrum Meeting 3

    项目 内容 课程名 软件工程 作业链接地址 Github地址 团队名称 小团团团队 具体目标 1.掌握软件测试基础技术:2.学习迭代式增量软件开发过程(Scrum) 1.1前言 第三天 时间: 201 ...

  3. loj2280 「FJOI2017」矩阵填数

    状压 dp.参考there #include <algorithm> #include <iostream> #include <cstring> #include ...

  4. Leetcode25--->Reverse Nodes in k-Group(以k个节点为段,反转单链表)

    题目: 给定一个单链表,一次反转k个节点,最终返回翻转后的链表的头节点:如果链表不足k个,则不变 举例: Given this linked list: 1->2->3->4-> ...

  5. 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法

    继承 概念: ①   继承背后的思想就是基于已存在的类来构建新类; ②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③   当从其它类导出的类叫作子 ...

  6. 九度oj 题目1177:查找

    题目描述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1.翻转  从下标为i的字符开始到i+len-1之间的字符串倒序:2.替换  命中如果第一位为1,用命 ...

  7. [转]Visual Studio调试之符号文件

    http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶 ...

  8. [luoguP1251] 餐巾计划问题(费用流)

    传送门 模型 网络优化问题,用最小费用最大流解决. 实现 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从每个Yi向T连一 ...

  9. NOI2017 [NOI2017]游戏 【2-sat】

    题目 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行nn 场游戏,每场游戏使用 ...

  10. 刷题总结——run(ssoj)

    题目: 题目描述 企鹅国正在举办全面运动会,第一项比赛就是跑步.N 个人在圆形跑道上跑步,他们都有各自的速度和起点.但这个跑步规则很奇怪,当两个人相遇的时候编号较小的就会出局,当场上剩下最后一个人的时 ...