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>标签外,还有另外两个标签用于设置菜单 ...
随机推荐
- VMware-Ubuntu入门(1)
大家都说Linux系统是让程序员用起来更有成就感的系统,我也来体验下: 对于小白鼠的我,并没有直接在电脑上重装Linux系统,而是通过VMware工具搭建Ubuntu虚拟linux环境. 首先展示下V ...
- Leetcode 483.最小好进制
最小好进制 对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制. 以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制. ...
- 进程,线程,以及Python的多进程实例
什么是进程,什么是线程? 进程与线程是包含关系,进程包含了线程. 进程是系统资源分配的最小单元,线程是系统任务执行的最小单元. 打个比方,打开word,word这个程序是一个进程,里面的拼写检查,字数 ...
- 设计模式(一)单例模式:1-饿汉模式(Eager)
思想: 饿汉模式是最常提及的2种单例模式之一,其核心思想,是类持有一个自身的 instance 属性,并且在申明的同时立即初始化. 同时,类将自身的构造器权限设为 private,防止外部代码创建对象 ...
- HDU——2087剪花布条
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Master&Slave是什么?
由于前段时间公司项目比较赶,一直抽不出时间写博客,今天偷空写一篇吧.前面给大家讲解了单机版redis的基本操作,现在继续给大家讲解一下Redis的进阶部分,主从复制和读写分离. 一.Master&am ...
- 网络流(自行理解的Dinic)
自行理解的Dinic 注释即讲解 #include<bits/stdc++.h> ; using namespace std; int read() { ,w=; ;ch=getchar( ...
- 【BJOI2014/bzoj4530】大融合
题意 有 $n$ 个点,初始没有连边,要求支持两个动态操作: 1. 加一条边(保证之前两点不连通) 2. 查询过一条边的简单路径数量(就是两边连通块的大小的乘积) $n,Q\le 100000$ 题解 ...
- vue学习:解决Apycharm的 * is only available in ES6(use 'esversion: 6') 问题
使用pycharm打开main.js,代码前出现黄点,js报错了 把鼠标移至import的波浪线上,出现提示:W119 - ‘import’ is only available in ES6(use ...
- C# 实现图像快速 水平 垂直 翻转
C# 图像水平,垂直翻转的方法,速度很快 重新把图像绘制成翻转的方法 /// <summary> /// 图像水平翻转 /// </summary> /// <para ...