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>标签外,还有另外两个标签用于设置菜单 ...
随机推荐
- python socket相关
套接字的工作流程(基于TCP和 UDP两个协议) TCP和UDP对比 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信( ...
- Ext.js给form加背景图片
{ iconCls: 'zyl_icons_showdetail', tooltip: '查看', handler: function(gridView, rowIndex, colIndex) { ...
- matlab 画图进阶
matlab 画图进阶 applications of matlab in engineering 图表类型的选择 first:advanced 2d plots special plots logl ...
- Leetcode 475.供暖气
供暖气 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器 ...
- PHP协程是通过生成器实现的,这里测试了PHP生成器的一些特性
学习PHP的生成器,测试了一些特性.代码如下: function gen() { $name = (yield 'hello'); $nickname = (yield 'world'); yield ...
- hdu2094 stl之set的应用
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【bzoj1585】[Usaco2009 Mar]Earthquake Damage 2 地震伤害 网络流最小割
题目描述 Farmer John的农场里有P个牧场,有C条无向道路连接着他们,第i条道路连接着两个牧场Ai和Bi,注意可能有很多条道路连接着相同的Ai和Bi,并且Ai有可能和Bi相等.Farmer J ...
- BZOJ1068 [SCOI2007]压缩 【区间dp】
题目 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位 ...
- restful的nginx配置方法
location /{ root /webserver/www/a.tk.com; index index.html index.htm index.php; if ( $document_uri ~ ...
- iOS-汉字排序
* 在IOS开发过程中,排序是我们经常遇到的问题,那么如何进行排序呢? * 在英文状态下,系统中有直接可以调用的方法. 例如:对数组[sss, aaa, bbb, ppp]进行排序,我们可以直接 ...