Cocos2d-x文本菜单

简介: <h3><span style="font-size:14px; font-weight:normal"><span style="color:windowtext">文本菜单是菜单项只是显示文本,文本菜单类包括了</span><span style="color:windowtext">MenuItemLabel</span><span style="color:windowtext">、<

文本菜单是菜单项只是显示文本文本菜单类包括了MenuItemLabelMenuItemFontMenuItemAtlasFontMenuItemLabel是个抽象类具体使用的时候是使用MenuItemFontMenuItemAtlasFont两个类。

文本菜单类MenuItemFont它的其中一个创建函数create定义如下

static MenultemAtlasFont*create  ( const std::string &  value, //要显示的文本
 const ccMenuCallback & callback                             //菜单操作的回调函数指针
 )

文本菜单类MenuItemAtlasFont是基于图片集的文本菜单项它的其中一个创建函数create定义如下

static MenuItemAtlasFont* create  ( const std::string &  value, //要显示的文本
 const std::string & charMapFile,                                         //图片集合文件
 int  itemWidth,                                                                       //要截取的文字在图片中的宽度
 int  itemHeight,                                                             //要截取的文字在图片中的高度
 char  startCharMap                                                      //菜单操作的回调函数指针
 )

这次我们会通过一个实例介绍一下文本菜单的使用这个实例如下图所示其中菜单Start是使用MenuItemFont实现的菜单Help是使用MenuItemAtlasFont实现的。


下面我们看看HelloWorldScene.cppinit函数如下

bool HelloWorld::init()
{
   if ( !Layer::init() )
   {
       return false;
   }
   
   Size visibleSize = Director::getInstance()->getVisibleSize();
   Point origin = Director::getInstance()->getVisibleOrigin();
   
    Sprite *bg =Sprite::create("menu/background.png");   
   bg->setPosition(Point(origin.x + visibleSize.width/2,
                             origin.y +visibleSize.height /2));
   this->addChild(bg);
 
   MenuItemFont::setFontName("Times New Roman");                                                       ①
   MenuItemFont::setFontSize(86);                                                                                      ②
   MenuItemFont *item1 = MenuItemFont::create("Start",
                                 CC_CALLBACK_1(HelloWorld::menuItem1Callback,this));                             ③
  
   
   MenuItemAtlasFont *item2 = MenuItemAtlasFont::create("Help",
                                        "menu/tuffy_bold_italic-charmap.png",48, 65, ' ',
                                   CC_CALLBACK_1(HelloWorld::menuItem2Callback,this));                         ④
   
   Menu* mn = Menu::create(item1, item2, NULL);                                                                         ⑤
   mn->alignItemsVertically();                                                                                               ⑥
   this->addChild(mn);                                                                                                         ⑦
   
   return true;
}

上述代码第①和②行是设置文本菜单的文本字体和字体大小。第③行代码是创建MenuItemFont菜单项对象它是一个一般文本菜单create是函数的第一个参数是菜单项的文本内容第二个参数是点击菜单项回调的函数指针。其中CC_CALLBACK_1宏是定义一个回调函数并函数与对象绑定在一起1表示这个函数有一个输出参数HelloWorld::menuItem1Callback是函数指针this代表函数所在的对象。

HelloWorld::menuItem1Callback需要在HelloWorld.h头文件中声明HelloWorld.h头文件代码如下

#include "cocos2d.h"
 
class HelloWorld : public cocos2d::Layer
{
public:
   
   virtual bool init();
   static cocos2d::Scene* scene();  
 
    void menuItem1Callback(cocos2d::Ref*pSender);
    void menuItem2Callback(cocos2d::Ref*pSender);
 
   CREATE_FUNC(HelloWorld);
};

回调函数代码如下函数中的参数是菜单项MenuItem的实例。

void HelloWorld::menuItem1Callback(Ref*pSender)
{
   MenuItem* item = (MenuItem*)pSender;
        log("TouchStart Menu Item %p", item);
}
 
void HelloWorld::menuItem2Callback(Ref*pSender)
{
   MenuItem* item = (MenuItem*)pSender;
        log("TouchHelp Menu Item %p", item);
}

HelloWorldScene.cppinit函数中第④行代码是创建一个MenuItemAtlasFont菜单项对象这种菜单项是基于图片集的菜单项。MenuItemAtlasFont需要将图片集放到资源目录Resources下。在本例中我们是将所有的图片都放到一个Resources下的menu目录中所以create函数的第二个参数是"menu/tuffy_bold_italic-charmap.png"要求带有menu路径。

还有第⑤行代码Menu* mn = Menu::create(item1, NULL)是创建菜单对象把之前创建的菜单项添加到菜单中create函数中有是这些菜单项的数组最后要用NULL结束。第⑥行代码mn->alignItemsVertically()是设置菜单项垂直对齐。第⑦行代码是this->addChild(mn,1,2)是把菜单对象添加到当前层中。

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
本书交流讨论网站 http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程 http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群257760386


《Cocos2d-x实战 C++卷》现已上线各大商店均已开售

京东http://item.jd.com/11584534.html

亚马逊http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当http://product.dangdang.com/23606265.html

互动出版网http://product.china-pub.com/3770734

《Cocos2d-x实战 C++卷》源码及样章下载地址

源码下载地址http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台


目录
相关文章
|
API 计算机视觉
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
|
自然语言处理 数据可视化
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
|
6月前
|
存储 UED
Qt自定义控件之动画文本
Qt自定义控件之动画文本
|
编解码 缓存 编译器
Unity 菜单界面的简单介绍
Unity 菜单界面的简单介绍
172 0
Unity 菜单界面的简单介绍
看别人在Unity的编辑器上添加菜单那么帅,我也要给Unity添加菜单
今天分享,如何添加自定义菜单栏,效果如下图所示。 第一种,在Component组件菜单下面: 第二种,添加到编辑器的菜单栏下:
Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
最近也换了公司,也换了新的工作,工资也象征性的涨了一点点,但是最近心里还是慌慌,不知道为什么,没有那种踏实感,感觉自己随时可以被抛弃的感觉。感觉自己在荒废时间,也感觉自己在浪费生命。
239 0
Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
591 0
PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。
PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。
891 0
PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。