Cocos2d-x文本菜单
2014-05-11 16:09
309 查看
文本菜单是菜单项只是显示文本,文本菜单类包括了MenuItemLabel、MenuItemFont和MenuItemAtlasFont。MenuItemLabel是个抽象类,具体使用的时候是使用MenuItemFont和MenuItemAtlasFont两个类。
文本菜单类MenuItemFont,它的其中一个创建函数create定义如下:[html] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
static MenultemAtlasFont*create ( const std::string & value, //要显示的文本
const ccMenuCallback & callback //菜单操作的回调函数指针
)
文本菜单类MenuItemAtlasFont是基于图片集的文本菜单项,它的其中一个创建函数create定义如下:
[html] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
static MenuItemAtlasFont* create ( const std::string & value, //要显示的文本
const std::string & charMapFile, //图片集合文件
int itemWidth, //要截取的文字在图片中的宽度
int itemHeight, //要截取的文字在图片中的高度
char startCharMap //菜单操作的回调函数指针
)
这次我们会通过一个实例介绍一下文本菜单的使用,这个实例如下图所示,其中菜单Start是使用MenuItemFont实现的,菜单Help是使用MenuItemAtlasFont实现的。
下面我们看看HelloWorldScene.cpp中init函数如下:
[html] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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头文件代码如下:
[html] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
#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的实例。
[html] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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.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文本菜单
- Cocos2d-x文本菜单
- Cocos2d-JS中的文本菜单
- Cocos2d-JS中的文本菜单
- Cocos2d-x中如何增加图片和文本菜单
- Cocos2d-x ——菜单层(CCMenuItemLabel) 一
- cocos2d-x-3.1 文本输入框简单使用
- 如何重新找回右键菜单新建项内没有文本文档文本文档的选择??
- Cocos2D实现RPG队伍菜单任意调整角色顺序的效果
- Clean Text Menu for Mac(文本菜单清洁工具)免激活版 v2.6破解版
- Cocos2d-x CCMenu 创建菜单
- cocos2d-x-3.1 文本输入框简单使用 (coco2d-x 学习笔记九)
- Java右键菜单实现文本组件内容的的复制、粘贴、剪切功能
- 【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应
- 修改右键菜单中新建txt文本文件的默认编码
- Cocos2d-x_CCMenu(菜单类)介绍
- cocos2d-x CCMenu菜单选项
- cocos2d-x之利用富文本控件遍历xml
- [泰然翻译] cocos2d programming guide 场景和菜单
- cocos2d-x中层和菜单的触摸控制