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

头文件:

#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 (0);// 返回scenereturn scene;
}MenuLayer1::MenuLayer1()
{//设置默认字体的大小CCMenuItemFont::setFontSize( 30 );//设置默认字体的名字CCMenuItemFont::setFontName("Courier New");// Font Item// 创建三个精灵作为字体的三个状态CCSprite* spriteNormal = CCSprite::create("cat.png", CCRectMake(0,23*2,115,23));CCSprite* spriteSelected = CCSprite::create("cat.png", CCRectMake(0,23*1,115,23));CCSprite* spriteDisabled = CCSprite::create("cat.png", CCRectMake(0,23*0,115,23));//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 ItemCCMenuItem* item2 = CCMenuItemImage::create("SendScoreButton.png", "SendScoreButtonPressed.png", this, menu_selector(MenuLayer1::menuCallback2) );//创建一个label  Label Item (LabelAtlas)CCLabelAtlas* labelAtlas = CCLabelAtlas::create("0123456789", "fps_images.png", 16, 24, '.');//创建一个label菜单栏CCMenuItemLabel* item3 = CCMenuItemLabel::create(labelAtlas, this, menu_selector(MenuLayer1::menuCallbackDisabled) );item3->setDisabledColor( ccc3(32,32,64) );item3->setColor( ccc3(200,200,255) );//创建一个字体的菜单栏 Font ItemCCMenuItemFont *item4 = CCMenuItemFont::create("I toggle enable items", this, menu_selector(MenuLayer1::menuCallbackEnable) );item4->setFontSizeObj(20);item4->setFontName("Marker Felt");// Font ItemCCMenuItemFont* item5 = CCMenuItemFont::create("Quit", this, menu_selector(MenuLayer1::onQuit));//创建一个颜色变化的动作CCActionInterval* color_action = CCTintBy::create(0.5f, 0, -255, -255);//逆向动作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=0;CCNode* child;CCArray * pArray = menu->getChildren();CCObject* pObject = NULL;//类似foreach循环
    CCARRAY_FOREACH(pArray, pObject){if(pObject == NULL)break;//转化为基类CCNodechild = (CCNode*)pObject;//获取坐标,该坐标相对于左下角作为(0,0)参考点CCPoint dstPoint = child->getPosition();int offset = (int) (s.width/2 + 50);if( i % 2 == 0)offset = -offset;child->setPosition( CCPointMake( dstPoint.x + offset, dstPoint.y) );child->runAction( // 创建弹跳效果的动画
                            CCEaseElasticOut::create(CCMoveBy::create(2, CCPointMake(dstPoint.x - offset,0)), 0.35f) );i++;}m_disabledItem = item3; item3->retain();//m_disabledItem->setIsEnabled( false );
addChild(menu);}void MenuLayer1::registerWithTouchDispatcher()
{CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, cocos2d::kCCMenuHandlerPriority+1, 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+1, this);unscheduleAllSelectors();CCLog("TOUCHES ALLOWED AGAIN");
}void MenuLayer1::menuCallbackDisabled(CCObject* sender)
{// hijack all touch events for 5 secondsCCDirector::sharedDirector()->getTouchDispatcher()->setPriority(cocos2d::kCCMenuHandlerPriority-1, 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(2);
}void MenuLayer1::onQuit(CCObject* sender)
{//[[Director sharedDirector] end];//getCocosApp()->exit();
}

运行的效果:

转载于:https://www.cnblogs.com/linzheng/p/3279489.html

[Cocos2d-x For WP8]Menu菜单相关推荐

  1. android中menu菜单扩增_【已解决】Android添加Menu菜单

    [背景] 想要在Android中添加Menu菜单. 目前已经有了menu的xml定义了: /res/menu/activity_main.xml android:id="@+id/menu_ ...

  2. [译][Tkinter 教程14] menu 菜单

    已获原作者授权. 原系列地址: Python Tkinter 简介 一提到"menu"这个词, 很多人首先想到的是餐馆里的菜单. 虽然餐馆菜单和计算机程序中的菜单看起来一点也不像, ...

  3. WPF 修改(优化)Menu菜单的样式

    Menu菜单,在软件中使用率很高的一个控件.包含具有层级关系的一个或多个MenuItem作为子菜单. 今天就来分享一个定义的菜单样式. 看一下效果图: 下面就来看看代码: 本次代码,全部都在MainW ...

  4. android 按钮 菜单,(期末要考啊)Android的menu(菜单)按钮的使用

    (期末要考啊)Android的menu(菜单)按钮的使用 安卓 Android的菜单按钮 使用xml的方式创建菜单项在res下的menu目录下新建一个main.xml文件,以menu为根节点,添加一个 ...

  5. Android 应用开发(第2章)---如何增加menu菜单

    1.Android studio 增加menu 菜单 新建MenuTest  project文件 1).在res上面右键->New->Android resource directory ...

  6. android开发学习——关于activity 和 fragment在toolbar上设置menu菜单

    在做一个项目,用的是Android Studio 系统的抽屉源码,但是随着页面的跳转,toolbar的title需要改变,toolbar上的menu菜单也需要改变,在网上找了好久,也尝试了很多,推荐给 ...

  7. Menu菜单资源Android

    Menu菜单资源Android 1.新建Menu\app\src\main\res\menu 目录 1.1新建activity_main.xml <?xml version="1.0& ...

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

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

  9. 一直以来使用div menu下拉时flash总是覆盖div menu菜单,当时就很老火了。

    一直以来使用div menu下拉时flash总是覆盖div menu菜单,当时就很老火了,今天在网上搜索找到下面解决方法. 有两种方法, 一种就是设置flash为透明: 但是如果你在DW中插入动画,再 ...

最新文章

  1. 1044 Shopping in Mars
  2. leangoo敏捷工具卡片关联上线
  3. A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)
  4. em算法python代码_EM算法的python实现的方法步骤
  5. Qt 编写应用程序升级的配置文件json 生成工具
  6. JavaScript Iframe富文本编辑器中的光标定位
  7. 怎么用EasyRecovery把文件夹中丢失的数据恢复
  8. react router官方文档_利用 React 高阶组件实现一个面包屑导航
  9. RocketMQ系列实战
  10. VS+Qt报错无法解析的外部符号
  11. HashMap 容量的初始化计算公式。是这样算的。请收藏
  12. Socket+华为云 实现广域网五子棋在线对战
  13. npm start 端口修改(window系统环境下)
  14. 解决jsp页面引入百度编辑器,出现xss漏洞
  15. 奋斗与首付,谁更能承载生命之重?
  16. 湿敏电阻的原理,结构,分类与应用场景要点总结
  17. oracle Number字段类型 对于小数位数的理解
  18. 文件服务器 fs,文件服务器 fs
  19. VMware 虚拟机安装 OpenWrt 作旁路由 单臂路由 img 镜像转 vmdk 旁路由无法上网 没网络
  20. 只要10分钟,搭建属于个人的炫酷网站,你还在犹豫什么?

热门文章

  1. 两台服务器实现会话共享
  2. 深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器
  3. javamail读取并发送完整的html页面
  4. TortoiseSVN配置管理使用详解
  5. Android开发:程序目录结构详解:activity主要方法等
  6. Document is invalid: no grammar found. at (null:3:8)
  7. Tensorflow 2.0的新特性
  8. 张志华教授《机器学习导论》和《统计机器学习》课程讲义
  9. Preference跳转activity出错Unable to find explicit activity class
  10. eclipse开发cocos2dx 3.2环境搭建之二: cocos2dx 3.2安装及测试运行 (An internal error occurred during: “C/C++ Indexe)