Cocos2d-X中Menu的综合运用
今天将曾经写的代码和项目集成到了一个菜单中,能够通过菜单切换到曾经做的项目
程序的project文件夹
主要代码分析:
LessonMenu.h中实现创建菜单,遍历菜单通过菜单切换到各个项目
- #ifndef _LessonMenu_H_
- #define _LessonMenu_H_
- #include "cocos2d.h"
- USING_NS_CC;
- class LessonMenu : public CCLayer
- {
- public:
- bool init();
- static CCScene* scene();
- void EnterLasson(CCObject* sender);
- //处理触摸事件
- bool ccTouchBegan(CCTouch*,CCEvent);
- void ccTouchMoved(CCTouch*, CCEvent*);
- CREATE_FUNC(LessonMenu);
- };
- #endif
LessonMenu.cpp中实现详细的功能
- #include "LessonMenu.h"
- #include"Label.h"
- #include"MenuItem.h"
- #include"TextFieldTTF.h"
- #include"AppMacros.h"
- #include"LabelAtlas.h"
- #include"SceneSecond.h"
- #include"TextFieldTTF1.h"
- #include"BMFont.h"
- #include"Layer.h"
- #include"Sprite.h"
- #include"Zorder.h"
- #include"Coord.h"
- #include"Sprite1.h"
- #include"TCCEditBox.h"
- #include"Menu.h"
- #include "MenuContinus.h"
- #include "T14SwitchControl.h"
- #include "T15Slider.h"
- CCScene* LessonMenu::scene()
- {
- CCScene* s = CCScene::create();
- LessonMenu* layer = LessonMenu::create();
- s->addChild(layer);
- return s;
- }
- //保存创建的cpp文件
- static const char* lessons[] =
- {
- "BMFont.cpp",
- "Coord.cpp",
- "Label.cpp",
- "LabelAtlas.cpp",
- "Layer.cpp",
- "Menu.cpp",
- "MenuItem.cpp",
- "SceneSecond.cpp",
- "Sprite.cpp",
- "Sprite1.cpp",
- "TCCEditBox.cpp",
- "TextFieldTTF.cpp",
- "TextFieldTTF1.cpp",
- "Zorder.cpp",
- "MenuContinus.cpp",
- "T14SwitchControl.cpp",
- "T15Slider.cpp"
- };
- bool LessonMenu::init()
- {
- CCLayer::create();
- //创建菜单
- CCMenu* menu = CCMenu::create();
- addChild(menu);
- for(int i = 0; i < sizeof(lessons)/sizeof(*lessons); i++)
- {
- //创建菜单项
- CCMenuItemFont* item = CCMenuItemFont::create(lessons[i]);
- menu->addChild(item);
- //设置处理函数
- item->setTarget(this, menu_selector(LessonMenu::EnterLasson));
- //设置菜单项的ID
- item->setTag(10000 + i);
- }
- //对齐菜单项
- menu->alignItemsVertically();
- //触摸菜单项
- setTouchEnabled(true);
- setTouchMode(kCCTouchesOneByOne);
- return true;
- }
- void LessonMenu::EnterLasson(CCObject* sender)
- {
- //强制类型转换
- CCMenuItem* item = dynamic_cast<CCMenuItem*>(sender);
- //得到菜单项的ID
- int tag = item->getTag() - 10000;
- //用于调用场景
- CCScene* scene = NULL;
- switch(tag)
- {
- case 0:
- {
- scene = BMFont::scene();
- }
- break;
- case 1:
- {
- scene = Coord::scene();
- }
- break;
- case 2:
- {
- scene = Label::scene();
- }
- break;
- case 3:
- {
- scene = LabelAtlas::scene();
- }
- break;
- case 4:
- {
- scene = Layer::scene();
- }
- break;
- case 5:
- {
- scene = Menu::scene();
- }
- break;
- case 6:
- {
- scene = MenuItem::scene();
- }
- break;
- case 7:
- {
- scene = SceneSecond::scene();
- }
- break;
- case 8:
- {
- scene = Sprite::scene();
- }
- break;
- case 9:
- {
- scene = Sprite1::scene();
- }
- break;
- case 10:
- {
- scene = TCCEditBox::scene();
- }
- break;
- case 11:
- {
- scene = TextFieldTTF::scene();
- }
- break;
- case 12:
- {
- scene = TextFieldTTF1::scene();
- }
- break;
- case 13:
- {
- scene = Zorder::scene();
- }
- break;
- case 14:
- {
- scene = MenuContinus::scene();
- }
- break;
- case 15:
- {
- scene = T14SwitchControl::scene();
- }
- break;
- case 16:
- {
- scene = T15Slider::scene();
- }
- break;
- }
- if(scene)
- {
- CCDirector::sharedDirector()->pushScene(scene);
- }
- }
- //处理触摸事件
- bool LessonMenu::ccTouchBegan(CCTouch* touch,CCEvent)
- {
- return true;
- }
- //处理触摸事件
- void LessonMenu::ccTouchMoved(CCTouch* touch, CCEvent*)
- {
- // 获得触摸移动的距
- CCPoint ptDelta = touch->getDelta();
- // 仅仅上下滑动的方法
- setPositionY(getPositionY() + ptDelta.y);
- }
LayerBack.h实现创建一个仅仅有一个返回button的层,通过返回button实现场景切换
- #ifndef _LayerBack_H_
- #define _LayerBack_H_
- #include "cocos2d.h"
- USING_NS_CC;
- class LayerBack : public CCLayer
- {
- public:
- bool init();
- void back(CCObject*);
- };
- #endif
LayerBack.cpp中是详细实现的代码
- #include "LayerBack.h"
- bool LayerBack::init()
- {
- CCLayer::init();
- //得到窗体的尺寸
- CCSize winSize = CCDirector::sharedDirector()->getWinSize();
- CCMenu* menu = CCMenu::create();
- addChild(menu);
- CCMenuItem* backItem = CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png",
- this, menu_selector(LayerBack::back));
- menu->addChild(backItem);
- //设置菜单项的位置(将菜单项设置到右下角)
- backItem->setPosition(ccp(winSize.width / 2 - backItem->getContentSize().width / 2,
- backItem->getContentSize().height / 2 - winSize.height / 2));
- return true;
- }
- void LayerBack::back(CCObject*)
- {
- //场景切换
- CCDirector::sharedDirector()->popScene();
- }
运行结果:
Cocos2d-X中Menu的综合运用的更多相关文章
- 如何在cocos2d项目中enable ARC
如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- android工程中menu的使用总结
android的Menu使用 转自:thinkYeah的博客 1.普通的Menu 先来看看最简单的Menu怎样实现. 在主Activity中覆盖onCreateOptionsMenu(Menu men ...
- Android(java)学习笔记196:Android中Menu的使用(静态和动态)
1.使用xml定义Menu(静态方法) 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于 ...
- Android中Menu的基本用法
一. 使用xml定义Menu 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单项 ...
- android中menu菜单的简单使用
我认为menu用起来简洁方便,特别是在一些大一点的程序中我们早就厌烦了一遍遍的加button,设置了菜单可谓是事半功倍,简单省事. <1>先声明定义下你的menu: private sta ...
- Activity中Menu相关的几个方法的调用时机
用于创建菜单的常用的方法有如下两种: 1.onCreateOptionsMenu(Menu menu) 2.onPrepareOptionsMenu(Menu menu) MyDiaryActivit ...
- Android中Menu的基本使用方法
一. 使用xml定义Menu 菜单资源文件必须放在res/menu文件夹中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单 ...
随机推荐
- HDU 3486 Interviewe RMQ
题意: 将\(n\)个数分成\(m\)段相邻区间,每段区间的长度为\(\left \lfloor \frac{n}{m} \right \rfloor\),从每段区间选一个最大值,要让所有的最大值之和 ...
- 《小团团团队》【Alpha】Scrum Meeting 3
项目 内容 课程名 软件工程 作业链接地址 Github地址 团队名称 小团团团队 具体目标 1.掌握软件测试基础技术:2.学习迭代式增量软件开发过程(Scrum) 1.1前言 第三天 时间: 201 ...
- loj2280 「FJOI2017」矩阵填数
状压 dp.参考there #include <algorithm> #include <iostream> #include <cstring> #include ...
- Leetcode25--->Reverse Nodes in k-Group(以k个节点为段,反转单链表)
题目: 给定一个单链表,一次反转k个节点,最终返回翻转后的链表的头节点:如果链表不足k个,则不变 举例: Given this linked list: 1->2->3->4-> ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- 九度oj 题目1177:查找
题目描述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1.翻转 从下标为i的字符开始到i+len-1之间的字符串倒序:2.替换 命中如果第一位为1,用命 ...
- [转]Visual Studio调试之符号文件
http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶 ...
- [luoguP1251] 餐巾计划问题(费用流)
传送门 模型 网络优化问题,用最小费用最大流解决. 实现 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从每个Yi向T连一 ...
- NOI2017 [NOI2017]游戏 【2-sat】
题目 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行nn 场游戏,每场游戏使用 ...
- 刷题总结——run(ssoj)
题目: 题目描述 企鹅国正在举办全面运动会,第一项比赛就是跑步.N 个人在圆形跑道上跑步,他们都有各自的速度和起点.但这个跑步规则很奇怪,当两个人相遇的时候编号较小的就会出局,当场上剩下最后一个人的时 ...