声 明 本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。 gl.paea.cn版权所有。 |
大家好,我是孤狼,又见面了,欢迎回到“和屌丝一起学cocos2dx教程”,上节我们说到了怎么把一个win下的程序转换到android下,你都会了吗?不会的话,记得要多练习哦还有不懂的可以去看看教程“和屌丝一起学cocos2dx-win移植android”。好了,这节我们讲一下cocos2dx里面的菜单。
菜单是一个项目中最基本的东西,因为你不论什么项目都缺少不了菜单,所以cocos2dx也给了我们很多方法来创建菜单,这样我们就能做出更好的菜单来了,当然咯,我们现在还只是学习阶段,我们的主要任务还是学会用它,至于做出来一个很好的菜单界面,那是后面我们项目期要做的事情。
首先呢,我们还是先来创建一个项目,就命名为Menudemo吧。
【一】:创建菜单
创建菜单的方法在之前估计大家都遇到了,就是我们在做“和屌丝一起学cocos2dx-自己的Hello World”的时候就已经用过一次了,这里还是要和大家说下,菜单只要创建一个就行了。我们更多的是创建不同的菜单项。所以创建菜单的工作一般都是放在创建玩菜单项后面的。
方法:
CCMenu * mymenu=CCMenu::create(菜单项1,菜单项2,......,NULL);
注意最后一定要加个空项,告诉他没了可以开始创建了哦。
【二】:创建菜单项
在cocos2dx中,我们有5中菜单项可以选择。它们分别是:CCMenuItemFont(字体菜单项)、CCMenuItemImage(图片菜单项)、CCMenuItemLabel(文本菜单项)、CCMenuItemSprite(精灵菜单项)、CCMenuItemToggle(开关菜单项)。下面我们就开始来学习他们的用法吧。
1.CCMenuItemFont(字体菜单项)
方法1:
CCMenuItemFont::create(选项文字,触发目标对象,触发目标函数);
方法2:
CCMenuItemFont::create(选项文字);
2.CCMenuItemImage(图片菜单项)
方法1:
CCMenuItemImage::create(默认显示的图片,点击时显示的图片,触发目标对象,触发目标函数);
3.CCMenuItemLabel(文本菜单项)
方法1:
CCMenuItemLabel::create(CCLableTTF对象,触发目标对象,触发目标函数);
4.CCMenuItemSprite(精灵菜单项)
方法1:
CCMenuItemSprite::create(默认显示的精灵对象,选中时显示的精灵对象,触发目标对象,触发目标函数);
5.CCMenuItemToggle(开关菜单项)
方法1:
CCMenuItemToggle::createWithTarget(触发目标对象,触发目标函数,CCMenuItem对象的可变参数列表);
【三】:实践
我们这次一次做5个按钮,每个按钮都绑定已有的函数关闭函数。
那么我们开始。
//获取尺寸
CCSize mysize=CCDirector::sharedDirector()->getWinSize();
//文字菜单项
CCMenuItemFont * mymenu1=CCMenuItemFont::create("文字菜单1");
mymenu1->setPosition(ccp(mysize.width/2,mysize.height-40));
CCMenuItemFont * mymenu2=CCMenuItemFont::create("文字菜单2",this,menu_selector(Menu::menuCloseCallback));
mymenu2->setPosition(ccp(mysize.width/2,mysize.height-80));
//图片菜单项
CCMenuItemImage * mymenu3 = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(Menu::menuCloseCallback));
mymenu3->setPosition(ccp(mysize.width/2,mysize.height-120));
//文本菜单项
CCLabelTTF * ttf1=CCLabelTTF::create("文本菜单","Helvetica",24);
CCMenuItemLabel * mymenu4=CCMenuItemLabel::create(ttf1,this,menu_selector(Menu::menuCloseCallback));
mymenu4->setPosition(ccp(mysize.width/2,mysize.height-160));
//精灵菜单项
CCSprite * mysprite1=CCSprite::create("CloseSelected.png");
CCSprite * mysprite2=CCSprite::create("CloseNormal.png");
CCMenuItemSprite * mymenu5=CCMenuItemSprite::create(mysprite1,mysprite2,this,menu_selector(Menu::menuCloseCallback));
mymenu5->setPosition(ccp(mysize.width/2,mysize.height-200));
//开关菜单项
CCMenuItemFont * font1=CCMenuItemFont::create("开");
CCMenuItemFont * font2=CCMenuItemFont::create("关");
CCMenuItemToggle * mymenu6=CCMenuItemToggle::createWithTarget(this,menu_selector(Menu::menuCloseCallback),font1,font2,NULL);
mymenu6->setPosition(ccp(mysize.width/2,mysize.height-240));
//创建菜单
CCMenu* mymenu = CCMenu::create(mymenu1,mymenu2,mymenu3,mymenu4,mymenu5,mymenu6,NULL);
mymenu->setPosition(CCPointZero);
this->addChild(mymenu, 1);
这里和大家说下,可能很多人这里运行后时乱码,解决乱码的方式也说过,直接改ccp文件编码为utf-8,但是如果你改了之后,可能本来正确的句子会变成错的,生成的时候会报错。所以以后我们在做菜单的时候,还是尽量使用图片形式,这样既避免了中文的干扰,也可以一定程度上美化界面。另外注意中文注释最好上下都打上空行,避免靠的近照成解析错误。
最后的运行效果。出来菜单1没有绑定事件点击后没有效果,其他的都可以直接关闭程序。好了。Demo我打包好,放在最下面,需要的同学可以直接下载下去生成看看。