在Cocos2d-X实现显示菜单的方式比较特殊,首先需要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu只是一个容器,需要使用CCMenuItemFont才能实现创建菜单
程序示例:创建一个简单的菜单
程序代码:
#include "Menu.h" CCScene* Menu::scene() { CCScene* scene = CCScene::create(); Menu* layer = Menu::create(); scene->addChild(layer); return scene; } bool Menu::init() { //初始化父类层 CCLayer::init(); //得到窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Menu(看不到效果,Menu只是一个容器) CCMenu* menu = CCMenu::create(); //添加Menu addChild(menu); //创建一个MenuItem, 默认的Item位置就在中央 CCMenuItemFont* item = CCMenuItemFont::create("This is item"); //将MenuItem增加到Menu上 menu->addChild(item1); return true; }
执行结果:
#ifndef __Menu_H__ #define __Menu_H__ #include "cocos2d.h" USING_NS_CC; class Menu : public CCLayer { public: bool init(); static CCScene* scene(); void menuHandler(CCObject*); CREATE_FUNC(Menu); }; #endif // __HELLOWORLD_SCENE_H__
#include "Menu.h" CCScene* Menu::scene() { CCScene* scene = CCScene::create(); Menu* layer = Menu::create(); scene->addChild(layer); return scene; } bool Menu::init() { //初始化父类层 CCLayer::init(); //得到窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Menu(看不到效果,Menu只是一个容器) CCMenu* menu = CCMenu::create(); //添加Menu addChild(menu); //创建一个MenuItem, 默认的Item位置就在中央 CCMenuItemFont* item1 = CCMenuItemFont::create("This is item1"); //将MenuItem增加到Menu上 menu->addChild(item1); //创建一个MenuItem, 默认的Item位置就在中央 CCMenuItemFont* item2 = CCMenuItemFont::create("This is item2"); //添加MenuItem menu->addChild(item2); //设置item2的位置 item2->setPositionY(item1->getPositionY() - 100); //设置响应函数:当触摸到item时调用Menu::menuHandler //第一个参数:响应函数所在的对象 //第二个参数:成员函数指针 item1->setTarget(this,menu_selector(Menu::menuHandler)); item2->setTarget(this,menu_selector(Menu::menuHandler)); //设置菜单项的ID //item1的ID为1 //item2的ID为2 item1->setTag(1); item2->setTag(2); return true; } //响应菜单事件 void Menu::menuHandler(CCObject* obj) { //将obj强制转换成菜单项类型 CCMenuItemFont* item = (CCMenuItemFont*)obj; //得到菜单项的ID int tag = item->getTag(); //判断用户点击了那个菜单 if(1 == tag) { MessageBox(NULL,TEXT("item1 is clicked !"),TEXT("MenuItem响应"),MB_OK); } else { MessageBox(NULL,TEXT("item2 is clicked !"),MB_OK); } }
执行结果:
当单击“This is Item1”后:
当单击“This is Item2”后:
@H_502_65@