首页 > 代码库 > Cocos2d-X中的菜单
Cocos2d-X中的菜单
在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 !"), TEXT("MenuItem响应"), MB_OK); } }
运行结果:
当单击“This is Item1”后:
当单击“This is Item2”后:
??
Cocos2d-X中的菜单
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。