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>标签外,还有另外两个标签用于设置菜单 ...
随机推荐
- BZOJ 4985: 评分
二分答案 >=key的记为1 f[i]表示令i位置为1所需要的最少的1的个数 队列模拟 #include<cstdio> #include<algorithm> usin ...
- luogu1736 创意吃鱼法
好的题解使人一下就懂啊-- s1[i][j]表示(i,j)最多向左(或右)延伸多少个格子,使这些格子中的数都是0(不包括(i,j)) s2[i][j]表示(i,j)最多向上延伸多少个格子,使这些格子中 ...
- postgres 用户管理
首次安装完成 pg 数据库后,会默认自带一个用户, 用户名: postgres 密码: postgres 可以使用命令 \du 查看数据库用户 创建新用户: create user dev with ...
- LiveScript 流程控制、循环以及列表推导式
The LiveScript Book The LiveScript Book Generators and Yield 你可以在你的 LiveScript 代码中使用 Ecmascript ...
- leetcode with python -> tree
100. Same Tree Given two binary trees, write a function to check if they are the same or not. Two bi ...
- ssh免密码登录远程服务器(不采用securecrt登录)
http://blog.csdn.net/leexide/article/details/17252369 Linux/UNIX下使用ssh-keygen设置SSH无密码登录 标签: ...
- git status 下中文显示乱码问题解决
$ git status -s ?? "\350\257\264\346\230\216.txt\n $ printf & ...
- 实现chrome多用户独立cookie
2018-02-08 10:58:57 在浏览器设置中添加一个用户并创建桌面快捷方式,属性中我们可以发现 "C:\Program Files (x86)\Google\Chrome\Appl ...
- [OJ#15]TR #2 画心
[OJ#15]TR #2 画心 试题描述 渠是一名画师.渠有一支神奇的画笔,可以画尽因果. 渠要画一幅画,这幅画由N个线段组成,线段从1开始编号,第i条线段有一个特殊的因果值Ai. 由于画太长了,渠不 ...
- poj1324 Holedox Moving
Holedox Moving Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 16980 Accepted: 4039 D ...