菜单栏这是游戏里面基本的控件来的,

头文件:

#include <CCMenu.h>                       

继承关系图:

 

头文件:

 #include <CCMenuItem.h>                       

继承关系图:

1 CCMenuItemLable

包括CCMenuItemAtlasFont和CCMenuItemFont是两种定义菜单项字体的方式,其中CCMenuItemFont是通过设定字体名称来设置字体,这个字体是系统自带的。CCMenuItemAtlasFont则是通过字体配置文件png文件,即配置文件所对应的图片。

2.CCMenuItemSprite 这个菜单项的特点就是可以封装图片进入菜单项

3.CCMenuItemToggle 可以将任意的CCMenuItem封装进去,作为一个按钮式的开关

示例代码:

CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{ // 'scene'是一个可以自动释放的对象
scene = CCScene::create();
//创建失败跳出循环
CC_BREAK_IF(! scene);
MenuLayer1 *layer = new MenuLayer1();
scene->addChild(layer);
} while ();
// 返回scene
return scene;
} MenuLayer1::MenuLayer1()
{
//设置默认字体的大小
CCMenuItemFont::setFontSize( );
//设置默认字体的名字
CCMenuItemFont::setFontName("Courier New");
// Font Item
// 创建三个精灵作为字体的三个状态
CCSprite* spriteNormal = CCSprite::create("cat.png", CCRectMake(,*,,));
CCSprite* spriteSelected = CCSprite::create("cat.png", CCRectMake(,*,,));
CCSprite* spriteDisabled = CCSprite::create("cat.png", CCRectMake(,*,,));
//dynamic_cast<CCNode*>(mgr)->addChild(spriteNormal);
//dynamic_cast<CCNode*>(mgr)->addChild(spriteSelected);
//dynamic_cast<CCNode*>(mgr)->addChild(spriteDisabled); //创建一个精灵菜单
CCMenuItemSprite* item1 = CCMenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, this, menu_selector(MenuLayer1::menuCallback) ); //创建一个图片的菜单栏项 Image Item
CCMenuItem* item2 = CCMenuItemImage::create("SendScoreButton.png", "SendScoreButtonPressed.png", this, menu_selector(MenuLayer1::menuCallback2) ); //创建一个label Label Item (LabelAtlas)
CCLabelAtlas* labelAtlas = CCLabelAtlas::create("", "fps_images.png", , , '.');
//创建一个label菜单栏
CCMenuItemLabel* item3 = CCMenuItemLabel::create(labelAtlas, this, menu_selector(MenuLayer1::menuCallbackDisabled) );
item3->setDisabledColor( ccc3(,,) );
item3->setColor( ccc3(,,) ); //创建一个字体的菜单栏 Font Item
CCMenuItemFont *item4 = CCMenuItemFont::create("I toggle enable items", this, menu_selector(MenuLayer1::menuCallbackEnable) ); item4->setFontSizeObj();
item4->setFontName("Marker Felt"); // Font Item
CCMenuItemFont* item5 = CCMenuItemFont::create("Quit", this, menu_selector(MenuLayer1::onQuit));
//创建一个颜色变化的动作
CCActionInterval* color_action = CCTintBy::create(0.5f, , -, -);
//逆向动作
CCActionInterval* color_back = color_action->reverse();
//创建一个动作的组合
CCFiniteTimeAction* seq = CCSequence::create(color_action, color_back, NULL);
//重复地运行该动作
item5->runAction(CCRepeatForever::create((CCActionInterval*)seq));
//创建菜单栏
CCMenu* menu = CCMenu::create( item1, item2, item3, item4, item5, NULL);
//垂直布局
menu->alignItemsVertically(); //创建菜单栏的弹跳效果 elastic effect
//获取屏幕的大小
CCSize s = CCDirector::sharedDirector()->getWinSize(); int i=;
CCNode* child;
CCArray * pArray = menu->getChildren();
CCObject* pObject = NULL;
//类似foreach循环
CCARRAY_FOREACH(pArray, pObject)
{
if(pObject == NULL)
break;
//转化为基类CCNode
child = (CCNode*)pObject;
//获取坐标,该坐标相对于左下角作为(0,0)参考点
CCPoint dstPoint = child->getPosition();
int offset = (int) (s.width/ + );
if( i % == )
offset = -offset; child->setPosition( CCPointMake( dstPoint.x + offset, dstPoint.y) );
child->runAction( // 创建弹跳效果的动画
CCEaseElasticOut::create(
CCMoveBy::create(, CCPointMake(dstPoint.x - offset,)), 0.35f
)
);
i++;
} m_disabledItem = item3; item3->retain();
//m_disabledItem->setIsEnabled( false ); addChild(menu); } void MenuLayer1::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, cocos2d::kCCMenuHandlerPriority+, true);
} MenuLayer1::~MenuLayer1()
{
m_disabledItem->release();
} void MenuLayer1::menuCallback(CCObject* sender)
{ } void MenuLayer1::menuCallbackConfig(CCObject* sender)
{ } void MenuLayer1::allowTouches(ccTime dt)
{
CCDirector::sharedDirector()->getTouchDispatcher()->setPriority(cocos2d::kCCMenuHandlerPriority+, this);
unscheduleAllSelectors();
CCLog("TOUCHES ALLOWED AGAIN");
} void MenuLayer1::menuCallbackDisabled(CCObject* sender)
{
// hijack all touch events for 5 seconds
CCDirector::sharedDirector()->getTouchDispatcher()->setPriority(cocos2d::kCCMenuHandlerPriority-, this);
schedule(schedule_selector(MenuLayer1::allowTouches), 5.0f);
CCLog("TOUCHES DISABLED FOR 5 SECONDS");
} void MenuLayer1::menuCallbackEnable(CCObject* sender)
{
m_disabledItem->setEnabled(! m_disabledItem->isEnabled() );
} void MenuLayer1::menuCallback2(CCObject* sender)
{
((CCLayerMultiplex*)m_pParent)->switchTo();
} void MenuLayer1::onQuit(CCObject* sender)
{
//[[Director sharedDirector] end];
//getCocosApp()->exit();
}

运行的效果:

[Cocos2d-x For WP8]Menu菜单的更多相关文章

  1. Learning Cocos2d-x for WP8(5)——详解Menu菜单

    原文:Learning Cocos2d-x for WP8(5)--详解Menu菜单 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(5)——详解Menu菜单 菜单是游戏必不 ...

  2. Android开发中的menu菜单

    复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...

  3. SharePoint 2013 激活标题字段外的Menu菜单

    前言 SharePoint 有个很特别的字段,就是标题(Title)字段,无论想要链接到项目,还是弹出操作项目的菜单,都是通过标题字段,一直以来需要的时候,都是通过将标题字段改名进行的. 其实,Sha ...

  4. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  5. [转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  6. 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  7. node-webkit教程<>Native UI API 之Menu(菜单)

    node-webkit教程(6)Native UI API 之Menu(菜单)1 前言... 2 6.1  Menu 概述... 3 6.2  menu api6 6.2.1  new Menu([o ...

  8. Android4.0 -- UI控件之 Menu 菜单的的使用(三)

    上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...

  9. Android4.0 -- UI控件之 Menu 菜单的的使用(一)

      这一讲开始我们来讲一下Android中菜单的使用方法,菜单是应用中的普通的组件,主要是提供友好和专注的用户体验,你可以在你的Activity中使用 Menu APIs 来提供用户动作和其他选项的操 ...

随机推荐

  1. nginx 反向代理 google

    nginx的反向代理,google一直都是不容易打开的,如果你有一台位于国外的vps或者服务器,就可以轻松解决这个问题,这次的主角是nginx,nginx的反向代理现在已经发展很强大了,很多时候拿他来 ...

  2. 在CI中集成phpmailer,方便使用SMTP发送邮件

    直接使用phpmailer的话,有时候不是很方便,特别你的很多功能都是基于CI完成的时候,要相互依赖就不方便了,所以在想,那是否可以将phpmailer集成到CI中呢,像使用email类这样使用他,功 ...

  3. i++和++i的深入理解

    研究了很久,对这个一直很模糊.相信大家,看完这篇文章,会有更深一层的认识! 一直以来,++ --语法浪费了太多人的时间.说句实在话,++ -- 在C语言中其实是一个很细节的语法,除了表达简练外,真的没 ...

  4. 【OpenStack】OpenStack系列12之OpenStack自动化测试详解

    参考文档: https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/How-to-setup-op ...

  5. iOS7总显示状态栏的解决方法

    转载http://blog.csdn.net/langresser_king/article/details/18351021 2014年2月份开始,苹果需求开发者必须使用xcode5开发游戏和应用, ...

  6. Android 中的AsyncTask

    在后台下载图片,下载完成后更新UI是一个很常见的需求.在没有AsyncTask类之前,我们需要写许多thread和Handler的代码去实现这个功能,有了AsyncTask,一切变得简单了.下面摘抄谷 ...

  7. sqlserver的执行计划

    一:执行计划生成过程 说到执行计划,首先要知道的是执行计划大概生成的过程,这样就可以做到就心中有数了,下面我画下简图: 1. 分析过程 这三个比较容易理解,首先我们要保证sql的语法不能错误,sele ...

  8. MinGW/MSYS 交叉编译环境搭建

    因为包的依赖关系不清楚,搭建时出错也不知道是什么原因,下面链接老外写的搭建步骤,写的非常详细还有脚本 已经编译的下载地址 http://ingar.satgnu.net/devenv/mingw32/ ...

  9. Heap:左式堆的应用例(任意序列变单调性最小价值)

    首先来说一下什么是左式堆: A:左式堆是专门用来解优先队列合并的麻烦(任意二叉堆的合并都必须重新合并,O(N)的时间). 左式堆的性质: 1.定义零路经长:节点从没有两个两个儿子节点的路经长,把NUL ...

  10. HDU5072 容斥原理

    G - Coprime Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit ...