[Cocos2d-x For WP8]Menu菜单
菜单栏这是游戏里面基本的控件来的,
头文件:
继承关系图:
头文件:
继承关系图:
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菜单相关推荐
- android中menu菜单扩增_【已解决】Android添加Menu菜单
[背景] 想要在Android中添加Menu菜单. 目前已经有了menu的xml定义了: /res/menu/activity_main.xml android:id="@+id/menu_ ...
- [译][Tkinter 教程14] menu 菜单
已获原作者授权. 原系列地址: Python Tkinter 简介 一提到"menu"这个词, 很多人首先想到的是餐馆里的菜单. 虽然餐馆菜单和计算机程序中的菜单看起来一点也不像, ...
- WPF 修改(优化)Menu菜单的样式
Menu菜单,在软件中使用率很高的一个控件.包含具有层级关系的一个或多个MenuItem作为子菜单. 今天就来分享一个定义的菜单样式. 看一下效果图: 下面就来看看代码: 本次代码,全部都在MainW ...
- android 按钮 菜单,(期末要考啊)Android的menu(菜单)按钮的使用
(期末要考啊)Android的menu(菜单)按钮的使用 安卓 Android的菜单按钮 使用xml的方式创建菜单项在res下的menu目录下新建一个main.xml文件,以menu为根节点,添加一个 ...
- Android 应用开发(第2章)---如何增加menu菜单
1.Android studio 增加menu 菜单 新建MenuTest project文件 1).在res上面右键->New->Android resource directory ...
- android开发学习——关于activity 和 fragment在toolbar上设置menu菜单
在做一个项目,用的是Android Studio 系统的抽屉源码,但是随着页面的跳转,toolbar的title需要改变,toolbar上的menu菜单也需要改变,在网上找了好久,也尝试了很多,推荐给 ...
- Menu菜单资源Android
Menu菜单资源Android 1.新建Menu\app\src\main\res\menu 目录 1.1新建activity_main.xml <?xml version="1.0& ...
- SharePoint 2013 激活标题字段外的Menu菜单
前言 SharePoint 有个很特别的字段,就是标题(Title)字段,无论想要链接到项目,还是弹出操作项目的菜单,都是通过标题字段,一直以来需要的时候,都是通过将标题字段改名进行的. 其实,Sha ...
- 一直以来使用div menu下拉时flash总是覆盖div menu菜单,当时就很老火了。
一直以来使用div menu下拉时flash总是覆盖div menu菜单,当时就很老火了,今天在网上搜索找到下面解决方法. 有两种方法, 一种就是设置flash为透明: 但是如果你在DW中插入动画,再 ...
最新文章
- 1044 Shopping in Mars
- leangoo敏捷工具卡片关联上线
- A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)
- em算法python代码_EM算法的python实现的方法步骤
- Qt 编写应用程序升级的配置文件json 生成工具
- JavaScript Iframe富文本编辑器中的光标定位
- 怎么用EasyRecovery把文件夹中丢失的数据恢复
- react router官方文档_利用 React 高阶组件实现一个面包屑导航
- RocketMQ系列实战
- VS+Qt报错无法解析的外部符号
- HashMap 容量的初始化计算公式。是这样算的。请收藏
- Socket+华为云 实现广域网五子棋在线对战
- npm start 端口修改(window系统环境下)
- 解决jsp页面引入百度编辑器,出现xss漏洞
- 奋斗与首付,谁更能承载生命之重?
- 湿敏电阻的原理,结构,分类与应用场景要点总结
- oracle Number字段类型 对于小数位数的理解
- 文件服务器 fs,文件服务器 fs
- VMware 虚拟机安装 OpenWrt 作旁路由 单臂路由 img 镜像转 vmdk 旁路由无法上网 没网络
- 只要10分钟,搭建属于个人的炫酷网站,你还在犹豫什么?
热门文章
- 两台服务器实现会话共享
- 深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器
- javamail读取并发送完整的html页面
- TortoiseSVN配置管理使用详解
- Android开发:程序目录结构详解:activity主要方法等
- Document is invalid: no grammar found. at (null:3:8)
- Tensorflow 2.0的新特性
- 张志华教授《机器学习导论》和《统计机器学习》课程讲义
- Preference跳转activity出错Unable to find explicit activity class
- eclipse开发cocos2dx 3.2环境搭建之二: cocos2dx 3.2安装及测试运行 (An internal error occurred during: “C/C++ Indexe)