在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; }
执行结果:
程序示例:创建多个菜单,并且实现菜单响应事件
在Menu.h中添加下面的代码
#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__
在Menu.cpp中添加下面的代码
#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”后:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。