下面介绍一下cocos2d-x中菜单的使用方法,从示例项目TestCpp中的MenuTest可以看到菜单的各种复杂多样的用法,但这里我们只学习最简单的文本菜单和图片菜单。
(注意:我使用的cocos2d-x版本是2.0.4,系统是win7)下载地址
我们在HelloWorld布景中创建两个菜单,分别为文本类型和图片类型,点击菜单后在输出台输出点击菜单的类型,好了,让我们一步一步的进行。
首先,创建一个cocos2d-x工程,命名为“MenuTest”。然后把我们需要的图片文件导入到工程中。
这里我用的是自带TestCpp项目里面的图片,在D:\cocos2d-2.0-x-2.0.4\samples\TestCpp\Resources\Images(你的目录有可能不一样)找到btn-play-normal.png和btn-play-selected.png复制到我们自己的项目中的Resources文件夹,然后在VS中右击项目选择添加->现有项,添加刚刚复制的图片到我们的项目MenuTest即可。
然后修改HelloWorld.h文件如下,即添加了两个回调函数。
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" #include "SimpleAudioEngine.h" using namespace cocos2d; class HelloWorld : public cocos2d::CCLayer { public: // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); // there's no 'id' in cpp, so we recommand to return the exactly class pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); void imageMenuCallback(CCObject* pSender); void labelMenuCallback(CCObject* pSender); // implement the "static node()" method manually CREATE_FUNC(HelloWorld); }; #endif // __HELLOWORLD_SCENE_H__
bool HelloWorld::init() { bool bRet = false; do { ////////////////////////////////////////////////////////////////////////// // super init first ////////////////////////////////////////////////////////////////////////// CC_BREAK_IF(! CCLayer::init()); ////////////////////////////////////////////////////////////////////////// // add your codes below... ////////////////////////////////////////////////////////////////////////// // 1. Add a menu item with "X" image, which is clicked to quit the program. // Create a "close" menu item with close icon, it's an auto release object. CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); CC_BREAK_IF(! pCloseItem); // Place the menu item bottom-right conner. pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20)); // Create a menu with the "close" menu item, it's an auto release object. CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); CC_BREAK_IF(! pMenu); // Add the menu to HelloWorld layer as a child layer. this->addChild(pMenu, 1); //获得屏幕的大小 CCSize size = CCDirector::sharedDirector()->getWinSize(); //创建一个图片菜单项。 //四个参数代表:正常显示的图片,选中菜单项后显示的图片,关闭时显示的图片,菜单项的回调函数。 CCMenuItemImage* imageItem = CCMenuItemImage::create( "btn-play-normal.png", "btn-play-selected.png", this, menu_selector(HelloWorld::imageMenuCallback)); //创建一个菜单,并设置位置 CCMenu* imageMenu = CCMenu::create(imageItem,NULL); imageMenu->setPosition(ccp(size.width/2,size.height/2)); //将图片菜单加入到HelloWorld布景中,第二个参数表示在Z轴的层次,屏幕由里到外从小到大 addChild(imageMenu,2); //创建一个行文本参数代表:显示内容,字体,大小 CCLabelTTF* label = CCLabelTTF::create("SceondMenu", "Arial",30); //创建一个文本项,参数代表:要显示的文本内容,目标对象,回调函数 CCMenuItemLabel* labelItem = CCMenuItemLabel::create(label, this, menu_selector(HelloWorld::labelMenuCallback)); //创建一个菜单,并设置位置 CCMenu* labelMenu = CCMenu::create(labelItem,NULL); labelMenu->setPosition(ccp(size.width/2,size.height/2+50)); //将文本菜单加入到HelloWorld布景中,第二个参数表示在Z轴的层次,屏幕由里到外从小到大 addChild(labelMenu,2); bRet = true; } while (0); return bRet; }
void HelloWorld::imageMenuCallback(CCObject* pSender) { //在输出台打印一句话 CCLog("ImageMenu"); } void HelloWorld::labelMenuCallback(CCObject* pSender) { //在输出台打印一句话 CCLog("LabelMenu"); }
运行项目出现如下界面
点击LabelMenu菜单输出台打印出“LabelMenu”,点击图片菜单打印“ImageMenu”。
这是最简单的菜单使用方法,大家了解一下,最后祝愿每一个奋斗在路上的人早日实现梦想!