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

程序的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. luogu2762 太空飞行计划问题

    最大权闭合子图 参考这,胡伯涛论文. 10,8,6,3这个简单割对应的闭合子图是A1,B1,B2 输出路径时,最后一次层次图中,与源点相连的点即选做的实验,与汇点相连的点即选用的仪器. #includ ...

  2. MyCAT+MySQL 搭建高可用企业级数据库集群——第3章 MyCat核心配置讲解

    3-1 章节综述 3-2 常用配置文件间的关系 3-3 server.xml配置详解 3-4 log4j2.xml配置文件 3-5 rule.xml 3-6 常用分片算法(上) 3-7 常用分片算法( ...

  3. Python学习-day7 类 部分socket

    这周还是继续关于类的学习,在面向对象的学习过程中又学习了网络编程,并且提交了编写FTP的作业. 复习一下类的相关概念和定义 类      属性           实例变量:内存中           ...

  4. SDOJ 3740 Graph

    8.9 t3 [描述] 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达. 2. ...

  5. javaScript流程控制与函数

    流程控制 1.1 条件语句 分支结构 单向分支 if (条件表达式) { code... } <!DOCTYPE html> <html> <head> <m ...

  6. [转]how to inserting multiple rows in one step

    To insert multiple rows in the table use executemany() method of cursor object. Syntax: cursor_objec ...

  7. 安装anaconda并配置环境

    安装anaconda的步骤 1.确定系统信息 uname -a 2.下载对应版本 3.sh 安装shell脚本 4.添加到对应路径 5.安装完anaconda之后,创建虚拟环境 conda creat ...

  8. 【转】参照protobuf,将json数据转换成二进制在网络中传输。

    http://blog.csdn.net/gamesofsailing/article/details/38335753?utm_source=tuicool&utm_medium=refer ...

  9. Welcome-to-Swift-15反初始化(Deinitialization)

    在一个类的实例被释放之前,反初始化函数被立即调用.用关键字deinit来标示反初始化函数,类似于初始化函数用init来标示.反初始化函数只适用于类类型. 反初始化原理 Swift会自动释放不再需要的实 ...

  10. 【bzoj3526】[Poi2014]Card 线段树区间合并

    题目描述 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的卡片了!第i个熊孩子会交换c[i]和d[i]两个位置上的卡片. ...