Cocos2d-X中的菜单
Posted cynchanpin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中的菜单的主要内容,如果未能解决你的问题,请参考以下文章