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

程序的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的综合运用的更多相关文章

  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. UVa 11795 状压DP Mega Man's Mission

    kill[S]表示消灭机器人的集合为S,剩下的所能杀死的机器人集合. 设d(S)表示杀死机器人集合为S的方法数,答案为d((1<<n) - 1). d(S)可以由d(S')转移过来,其中S ...

  2. 使用css Flexbox实现垂直居中

    CSS布局对我们来说一直是个噩梦,我们都认为flexbox是我们的救世主.是否真的如我们说说,还有待观察,但是flexbox确非常轻松的解决css长久一来比较难解决的居中问题.让我们来看看到底有多容易 ...

  3. JavaScript: 2015 年回顾与展望

    链接:http://www.sitepoint.com/javascript-2015-review/ JavaScript经历了一个不平凡的一年.尽管到5月份已经20年了,关于JS的新闻.项目和兴趣 ...

  4. foy: 轻量级的基于 nodejs 的通用 build 工具

    npm 的 scripts 下写的命令太多就很容易很乱,各种第三方轮子都只能解决一部分问题,总感觉不是很好用,想找个类似 make 的工具只能找到 jake, 可是 jake 的 API 太老,居然很 ...

  5. 前端AI切图技巧

    AI的基本使用 1.选中多个不同图层. 首先在AI右边工具栏找到“图层” 然后选择需要切图的图层(按住“ctrl”点击) 最后拖到PS里面的新建的图层. 还有个问题,就是图层关联太多,无法拖动某些图层 ...

  6. python - unitest - 实战题目

    '''题目要求 1:自己写一个工具类,完成数学的加减乘除以及平方积操作2:对每个方法写2个用例3:针对测试用例选用不同的方法去执行,然后生成测试报告''' '''实现: 3个文件: work_2018 ...

  7. 面向对象——property

    1.property特性 property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉到name是执行了一 ...

  8. [git 学习篇] git checkout 撤销修改

    git status 查看当前创库情况 liuzhipeng@exdroid43:~/pad/pad-test$ git status 位于分支 master 您的分支与上游分支 'origin/ma ...

  9. pl/sql 函数及与存储过程的区别

    函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句.而在函数体内必须包含return语句返回的数据.我们可以使用create function来建立函数. 1).接下来通过一个案 ...

  10. list 类

    题外:len = sizeof(a)/sizeof(a[0]); 求出数组长度 1.list是一种以双向链表方式实现的一种顺序容器.list容器中,存放元素的存储单元可以是连续的也可以是不连续的. 2 ...