在Cocos2d-X实现显示菜单的方式比較特殊,首先须要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu仅仅是一个容器,须要使用CCMenuItemFont才干实现创建菜单

程序演示样例:创建一个简单的菜单

程序代码:

#include "Menu.h"

CCScene* Menu::scene()
{
CCScene* scene = CCScene::create(); Menu* layer = Menu::create(); scene->addChild(layer); return scene;
} bool Menu::init()
{
//初始化父类层
CCLayer::init(); //得到窗体的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Menu(看不到效果,Menu仅仅是一个容器)
CCMenu* menu = CCMenu::create(); //加入Menu
addChild(menu); //创建一个MenuItem, 默认的Item位置就在中央
CCMenuItemFont* item = CCMenuItemFont::create("This is item"); //将MenuItem添加到Menu上
menu->addChild(item1); return true;
}

运行结果:

程序演示样例:创建多个菜单,而且实现菜单响应事件

在Menu.h中加入以下的代码

#ifndef __Menu_H__
#define __Menu_H__ #include "cocos2d.h"
USING_NS_CC; class Menu : public CCLayer
{
public:
bool init(); static CCScene* scene(); void menuHandler(CCObject*); CREATE_FUNC(Menu);
}; #endif // __HELLOWORLD_SCENE_H__

在Menu.cpp中加入以下的代码

#include "Menu.h"

CCScene* Menu::scene()
{
CCScene* scene = CCScene::create(); Menu* layer = Menu::create(); scene->addChild(layer); return scene;
} bool Menu::init()
{
//初始化父类层
CCLayer::init(); //得到窗体的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Menu(看不到效果。Menu仅仅是一个容器)
CCMenu* menu = CCMenu::create(); //加入Menu
addChild(menu); //创建一个MenuItem, 默认的Item位置就在中央
CCMenuItemFont* item1 = CCMenuItemFont::create("This is item1"); //将MenuItem添加到Menu上
menu->addChild(item1); //创建一个MenuItem, 默认的Item位置就在中央
CCMenuItemFont* item2 = CCMenuItemFont::create("This is item2"); //加入MenuItem
menu->addChild(item2); //设置item2的位置
item2->setPositionY(item1->getPositionY() - 100); //设置响应函数:当触摸到item时调用Menu::menuHandler
//第一个參数:响应函数所在的对象
//第二个參数:成员函数指针
item1->setTarget(this, menu_selector(Menu::menuHandler));
item2->setTarget(this, menu_selector(Menu::menuHandler)); //设置菜单项的ID
//item1的ID为1
//item2的ID为2
item1->setTag(1);
item2->setTag(2); return true;
} //响应菜单事件
void Menu::menuHandler(CCObject* obj)
{
//将obj强制转换成菜单项类型
CCMenuItemFont* item = (CCMenuItemFont*)obj; //得到菜单项的ID
int tag = item->getTag(); //推断用户点击了那个菜单
if(1 == tag)
{
MessageBox(NULL, TEXT("item1 is clicked !"), TEXT("MenuItem响应"), MB_OK);
}
else
{
MessageBox(NULL, TEXT("item2 is clicked !"), TEXT("MenuItem响应"), MB_OK);
}
}

运行结果:

当单击“This is Item1”后:

当单击“This is Item2”后:



Cocos2d-X中的菜单的更多相关文章

  1. android中常用菜单(menu)的基本知识

    (一)选项菜单 1.简单的创建菜单: @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMe ...

  2. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  3. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. 在 jupyter 中添加菜单和自动完成功能

    在 jupyter 中添加菜单和自动完成功能 参考文档http://www.360doc.com/content/17/1103/14/1489589_700569828.shtmlhttp://to ...

  6. Android 中的菜单 OptionsMenu的简单应用

    OptionsMenu就是安卓手机中的菜单选项 首先 要实现对菜单的操作就要先重写OnCreateOptionsMenu(Menu menu)方法 通常有两种方法来实现对菜单中选项的添加 第一种是动态 ...

  7. 如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

    方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef ...

  8. WPF中的菜单模板

    原文:WPF中的菜单模板 资源字典代码如下: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xa ...

  9. bootstrap如何去除自带的样式----导航栏中的菜单实现平滑的过渡到对应的菜单区域-------动态跟换模态框中的内容

    问题1:如何去除bootstap中css中自带的overflow:hidden这个样式 今天遇见在bootstap中轮播图上的  附带图  片不能够显示出来,图片始终有一部分的高度  被隐藏了 后来通 ...

  10. abp web.mvc项目中的菜单加载机制

    abp中的菜单加载机制 在abp中菜单的定义与我们传统写的框架不一样,它是在编写代码的时候配置,而我们一般写的通用权限管理系统中,是后期在后台界面中添加的.这一点有很大不同.abp关于菜单的定义及管理 ...

随机推荐

  1. 转 MySQL数据库基础

    http://lib.csdn.net/article/mysql/57883 1 数据库基础 一.数据库与数据库管理系统 1.数据库(DB):存放数据的仓库,从广义来说,数据不仅包括数字,还包括了文 ...

  2. LN : leetcode 283 Move Zeroes

    lc 283 Move Zeroes 283 Move Zeroes Given an array nums, write a function to move all 0's to the end ...

  3. 添加telnet命令

    打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,把这2项都勾选上,然后确定就可以了 注意,如果只要telnet别人的话,就选telnet客户端. ...

  4. Android - 收藏集

    Android - 收藏集 https://www.jianshu.com/p/dad51f6c9c4d?utm_campaign=maleskine&utm_content=note& ...

  5. NVIDIA各个领域芯片现阶段的性能和适应范围

    NVIDIA作为老牌显卡厂商,在AI领域深耕多年.功夫不负有心人,一朝AI火,NVIDIA大爆发,NVIDIA每年送给科研院所和高校的大量显卡,大力推广Physix和CUDA,终于钓了产业的大鱼. 由 ...

  6. 安装svn

    一.安装 1.查看是否安装cvs rpm -qa | grep subversion 2.安装 yum install subversion 3.测试是否安装成功 /usr/bin/svnserve ...

  7. Calendar的用法

    DAY_OF_MONTH的主要作用是cal.get(DAY_OF_MONTH),用来获得这一天在是这个月的第多少天 Calendar.DAY_OF_YEAR的主要作用是cal.get(DAY_OF_Y ...

  8. idea之快速查看类所在jar包

  9. oracle 内连接 左外连接 右外连接的用法,(+)符号用法

    1. 内连接很简单 select A.*, B.* from A,B where A.id = B.id select A.*, B.* from A inner join B on A.id = B ...

  10. css3文字渐变无效果的解决方案

    现在css3越来月流行了,为了实现一些高大上的效果,我们会用一些渐变的特效,请看文字渐变的特效代码: .title { font-size: 60px; line-height: 80px; text ...