说道游戏, 有个我们不得不说的控件, 菜单控件(CCMenu), 平常我们与游戏很多的交互都来自于菜单, 菜单是游戏中不可或缺的一部分, 我们今天就来看看菜单控件,
用法:
CCMenu::create( 菜单项1, 菜单项2..., NULL);
我们开始创建菜单( 旁白: 骗子, 根本就不行嘛)
别急, 我们先来看看参数, 哦 又是一个可变长参数, 结尾又要用NULL表示, 前面的参数是传进来的菜单项, 表示我们创建了哪些菜单
我们先来看看有哪些
CCMenuItemImage::create( "没有点击的时候显示的图片", "点击的时候显示的图片", 目标对象(一般写this), menu_selector(回调函数));//用来创建图片菜单
CCMenuItemFont::::create( "显示的文字", 目标对象(一般写this), menu_selector(回调函数));//用来创建文字菜单, 显示的文字也可以使用字体标签, 当然, 我们得换成CCMenuItemLabel
CCMenuItemToggle::createWithTarget( 目标对象(一般写this), menu_selector(回调函数), 可变长参数表(CCMenuItem对象), NULL);//用来创建开关菜单
我们找两张图片啊:
再写菜单之前, 我们创建两个函数( 旁白: 明明就是三个嘛), 用来点击菜单时候的调用这些函数:
在头文件里加上:
void menuCloseCallback(CCObject* pSender); void font( CCObject* pSender); void toggle( CCObject* pSender);
void HelloWorld::menuCloseCallback(CCObject* pSender) { CCLOG( "imageMenu"); } void HelloWorld::font( CCObject* pSender) { CCLOG( "<span style="font-family: Arial, Helvetica, sans-serif;">fontMenu</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span> } void HelloWorld::toggle( CCObject* pSender) { CCLOG( "<span style="font-family: Arial, Helvetica, sans-serif;">toggleMenu</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span> }
CCMenuItemImage* imgMenu = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); //创建图片菜单 CCMenuItemFont* fontMenu = CCMenuItemFont::create( "Play Game", this, menu_selector(HelloWorld::font)); //创建文字菜单 CCMenuItemToggle* toggleMenu = CCMenuItemToggle::createWithTarget( this, //创建开关菜单 menu_selector(HelloWorld::toggle), CCMenuItemFont::create( "on"), CCMenuItemFont::create( "off"), NULL); CCMenu* menu = CCMenu::create( imgMenu, fontMenu, toggleMenu, NULL); //创建菜单, 将菜单项加载进来 menu->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2)); addChild( menu);
我们看看效果:
咦, 好像不对啊, 怎么说有的菜单都挤在一起了啊, 原来我们没有对每个菜单项设置位置, 我们可以对每个菜单项设置位置哦,
其实, cocos2dX还为我们提供了其他解决办法, 例如纵向对其之类的, 看看这个
// menu->alignItemsHorizontally(); // 垂直对齐 menu->alignItemsVertically(); // 水平对象 // menu->alignItemsInColumns(2, 1, NULL); // 两行,两列,一列
我们来点击每个菜单看看效果,
点击图片菜单, 按下的时候两张图片切换了, 并且在输出打印了imgMenu,
点击文字菜单, 文字放大, 并且输出打印了fontMenu
点击文字菜单, 文字改变, 并且输出打印了toggleMenu
嗯, 今天也差不多啦, CCMenu很实用简单的, 还是那句话, 希望大家多练习