文本菜单是菜单项只是显示文本,文本菜单类包括了MenuItemLabel、MenuItemFont和MenuItemAtlasFont。MenuItemLabel是个抽象类,具体使用的时候是使用MenuItemFont和MenuItemAtlasFont两个类。

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

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

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

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

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

下面我们看看HelloWorldScene.cpp中init函数如下:

  1. bool HelloWorld::init()
  2. {
  3. if ( !Layer::init() )
  4. {
  5. return false;
  6. }
  7. Size visibleSize = Director::getInstance()->getVisibleSize();
  8. Point origin = Director::getInstance()->getVisibleOrigin();
  9. Sprite *bg =Sprite::create("menu/background.png");
  10. bg->setPosition(Point(origin.x + visibleSize.width/2,
  11. origin.y +visibleSize.height /2));
  12. this->addChild(bg);
  13. MenuItemFont::setFontName("Times New Roman");                                                       ①
  14. MenuItemFont::setFontSize(86);                                                                                      ②
  15. MenuItemFont *item1 = MenuItemFont::create("Start",
  16. CC_CALLBACK_1(HelloWorld::menuItem1Callback,this));                             ③
  17. MenuItemAtlasFont *item2 = MenuItemAtlasFont::create("Help",
  18. "menu/tuffy_bold_italic-charmap.png",48, 65, ' ',
  19. CC_CALLBACK_1(HelloWorld::menuItem2Callback,this));                         ④
  20. Menu* mn = Menu::create(item1, item2, NULL);                                                                         ⑤
  21. mn->alignItemsVertically();                                                                                               ⑥
  22. this->addChild(mn);                                                                                                         ⑦
  23. return true;
  24. }

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

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

  1. #include "cocos2d.h"
  2. class HelloWorld : public cocos2d::Layer
  3. {
  4. public:
  5. virtual bool init();
  6. static cocos2d::Scene* scene();
  7. void menuItem1Callback(cocos2d::Ref*pSender);
  8. void menuItem2Callback(cocos2d::Ref*pSender);
  9. CREATE_FUNC(HelloWorld);
  10. };

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

  1. void HelloWorld::menuItem1Callback(Ref*pSender)
  2. {
  3. MenuItem* item = (MenuItem*)pSender;
  4. log("TouchStart Menu Item %p", item);
  5. }
  6. void HelloWorld::menuItem2Callback(Ref*pSender)
  7. {
  8. MenuItem* item = (MenuItem*)pSender;
  9. log("TouchHelp Menu Item %p", item);
  10. }

HelloWorldScene.cpp中init函数中第④行代码是创建一个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)是把菜单对象添加到当前层中。

Cocos2d-x文本菜单的更多相关文章

  1. Cocos2d-JS中的文本菜单

    文本菜单是菜单项只能显示文本,文本菜单类包括了cc.MenuItemLabel.cc.MenuItemFont和cc.MenuItemAtlasFont.cc.MenuItemLabel是个抽象类,具 ...

  2. 写一个带文本菜单的程序,菜单项如下 (1) 取五个数的和 (2) 取五个数的平均值 (X) 退出。

    问题: 写一个带文本菜单的程序,菜单项如下(1)    取五个数的和 (2)     取五个数的平均值(X)    退出. 由用户做一个选择, 然后执行相应的功能.当用户选择退出时程序结束. 实现: ...

  3. [转] 利用shell创建文本菜单与窗口部件的方法

    [From] http://www.jb51.net/article/129460.htm 前言 创建交互式shell脚本最常用的方法是使用菜单.提供各种选项可以帮助脚本用户了解脚本能做什么,不能做什 ...

  4. Cocos2d-x中如何增加图片和文本菜单

    菜单都以MenuItem开头 MenuItemLabel - 文本菜单项 MenuItemImage - 图片菜单项 // on "init" you need to initia ...

  5. liunx中图形化桌面环境中的脚本编程之——创建文本菜单

    整体是通过建立菜单布局,然后根据菜单上的布局建立函数(就是为这些布局实现功能),最后将函数和布局实现逻辑上的相连: 如何建立菜单布局? 整体上是通过打印字符创建出,因此需要使用echo命令,但是有一些 ...

  6. cocos2d-x实战 C++卷 学习笔记--第4章 使用菜单

    前言: 菜单中包含菜单项,菜单项类是 MenuItem ,每个菜单项都有三个基本状态:正常.选中和禁止. (MenuItem)菜单分类: (文本菜单)MenuItemLabel : MenuItemA ...

  7. Cocos2d-x学习笔记(七)菜单

    菜单类继承关系如下: 图1 菜单类继承关系 文本菜单只能显示文本,包括:MenuItemLabel.MenuItemFont和MenuItemAtlasFont: #include "Hel ...

  8. Cocos2d-x lua 游戏中的菜单(Menu)

    菜单相关类包含 菜单(Menu)类 和 菜单项( MenuItem )类 Menu类图(派生于Layer) ref <-- Node <-Layer <-- Menu MenuIte ...

  9. 使用Select命令创建菜单

    创建文本菜单的一半功夫都花在了创建菜单布局和获取输入的字符上.bash shell提供了一个很容易上手的小工具来自动完成这些工作select命令允许从单个命令行创建菜单,然后在提取输入的答案并自动处理 ...

随机推荐

  1. Approaching the Fun Factor in Game Design

    I recently did some research on this and talked to Dr. Clayton Lewis (computer Scientist in Residenc ...

  2. TP复习14

    ## ThinkPHP 3.1.2 控制器的模块和操作#讲师:赵桐正微博:http://weibo.com/zhaotongzheng 本节课大纲:一.空模块和空操作 1.空操作 function _ ...

  3. docker(4):coreos+docker+rancher真厉害

    http://blog.csdn.net/freewebsys/article/category/3103827

  4. LINUX HOOK

    http://blog.csdn.net/yyttiao/article/details/7346287

  5. GDB---Oracle Function Call List

    http://yong321.freeshell.org/Oracle Function Call List 1. Oracle function call list If you want to s ...

  6. 基于jQuery美化联动下拉选择框

    今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  7. sed命令用法详解

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...

  8. Spring mvc编码配置

    Spring3 MVC也带有自己的编码: jar包:org.springframework.web-3.0.0.RELEASE.jar 只需要在web.xml配置即可: <!-- spring ...

  9. 自定义uiview 当没有数据的时候 显示自定义的uiview界面

    // // ZSDTJNoDataView.h // ZSDTJNoDataView // // Created by Mac on 14-12-28. // Copyright (c) 2014年 ...

  10. JavaScript工厂模式代码

    function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayNam ...