
在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”后:
总结
以上是内存溢出为你收集整理的Cocos2d-X中的菜单全部内容,希望文章能够帮你解决Cocos2d-X中的菜单所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)