Cocos2d-x学习笔记(七)-------->Button控件

Cocos2d-x学习笔记(七)-------->Button控件,第1张

概述Button控件 一、按钮控件的介绍及使用 Button控件:在引擎中实现按钮有多种可选方法,其主要区别在于可视效果的区别,你可以选择使用图片生成精灵作为按钮各个状态的显示效果,也可以使用各种字体生成Label控件,而Label控件实际上就是精灵的子类,它可以作为按钮各个状态的显示效果。 生成图片式按钮: 使用:在创建图片式按钮的过程中,首先要指定每个状态用到的图片,用这些图片生成精灵对象。 // button控件 一、按钮控件的介绍及使用 button控件:在引擎中实现按钮有多种可选方法,其主要区别在于可视效果的区别,你可以选择使用图片生成精灵作为按钮各个状态的显示效果,也可以使用各种字体生成Label控件,而Label控件实际上就是精灵的子类,它可以作为按钮各个状态的显示效果。
生成图片式按钮使用:在创建图片式按钮的过程中,首先要指定每个状态用到的图片,用这些图片生成精灵对象。
//创建三个图片精灵,分别用于按钮的正常状态、按下状态及无效状态CCSprite* spritenormal = CCSprite::create("menuitemsprite.png",CCRectMake(0,23*2,115,23));CCSprite* Spriteselected = CCSprite::create("menuitemsprite.png",23*1,23));CCSprite* spriteDisabled= CCSprite::create("menuitemsprite.png",23*0,23));
然后使用刚刚生成的精灵对象生成图片式按钮,其类型是 CcmenuItemSprite。在生成函数中还指定了按钮按下时的回调函数MenulayerMainMenu::menuCallback。x引擎使用 menu_selector()这样的宏定义来指定按钮按下时将要执行的回调函数。回调函数中,是按钮按下之后的代码内容,例如场景跳转等 *** 作可以放在这里执行。
//生成使用精灵图片的按钮CcmenuItemSprite* item1 = CcmenuItemSprite::create(spritenormal,Spriteselected,spriteDisabled,this,menu_selector(MenulayerMainMenu::menuCallback));

生成标签式按钮使用:以 BitmapFont字体的标签为例,首先生成一个 cclabelBMFont类型的标签控件,然后使用此标签显示按钮的状态,同时在生成按钮时指定按钮的响应函数为MenulayerMainMenu::menuCallbackConfig函数。
cclabelBMFont* label = cclabelBMFont::create("configuration","Fonts/bitmapFontTest3.fnt");CcmenuItemLabel* item5 = CcmenuItemLabel::create(label,menu_selector(MenulayoutMainMenu::menuCallbackConfig));

最后两种方式生成的按钮控件都需要添加到一个 Ccmenu类型的层节点上, Ccmenu类型的层与普通的层节点不同,它是专门捕捉并处理用户输入 *** 作的,所有与用户输入有关的 UI控件,都需要添加到这个类型的层节点上,用户对控件的 *** 作才能被x引擎捕捉到,所以在按钮定义完成之后,我们需要在场景中定义并添加一个 Ccmenu类型的层节点,并将按钮都添加到此层节点中。
Ccmenu* menu = Ccmenu::create(item1,item2,item3,item4,item5,item6,item7,item8,NulL);menu->alignItemsvertically();
:最后一定要再添加一个NulL,这样Ccmenu对象就知道已经添加到尾部了,最后使用Ccmenu对象的alignItemsvertically函数将控件进行了垂直方向的对齐 *** 作,这样全部按钮就在垂直方向居中对齐了。
效果:

二、悬挂按钮控件的介绍及使用 Togglebutton控件:悬挂按钮,在x引擎中对应的名称 CcmenuItemToggle。它与普通按钮的区别在于其作用是用于标记状态的,同时他也可以处理按钮被按下时的事件。 Togglebutton的底层实现,实际上是使用了两个普通按钮控件,一个按钮用于显示其On状态,另一个用于显示其Off状态,同时这些按钮都可以响应同一个点击事件。 使用
CcmenuItemFont::setFontname("Marker Felt");CcmenuItemFont::setFontSize(34);CcmenuItemToggle* item = CcmenuItemToggle::createWithTarget(this,menu_selector(Menulayer4::menuCallback),CcmenuItemFont::create("On"),CcmenuItemFont::create("Off"),NulL);
效果:
在使用 CcmenuItemFont生成标签式按钮之前,指定标签上显示的系统字体以及字体大小。然后用 CcmenuItemFont::create("On")CcmenuItemFont::create("Off")生成两个标签式按钮,分别会显示字符串“On”和“Off”代表开启和关闭状态,在使用 CcmenuItemToggle生成悬挂式按钮时也是使用 menu_selector宏来指定悬挂按钮点击后的回调函数,然后将生成的标签式按钮作为参数传入,最后传入的参数也是 NulL,代表到了参数末尾。 :如果一个悬挂式按钮只有两种状态,添加两个状态按钮就可以了;如果悬挂按钮需要表现多个状态,比如在游戏中一个悬挂按钮要为用户提供“简单”,“普通”,“困难”三个难度之间的切换,这时就需要生成并传入三个普通按钮来表示这三个状态。
CcmenuItemToggle* item = CcmenuItemToggle::createWithTarget(this,CcmenuItemFont::create("Easy"),CcmenuItemFont::create("normal"),CcmenuItemFont::create("Hard"),NulL);
效果:
这个悬挂按钮生成并添加到场景中之后,会默认显示它的第一个状态按钮“Easy”,单击一次之后会切换到下一个状态按钮“Nomal”,再单击一次会切换到"Hard"状态按钮,再点击就会循环显示“Easy”状态按钮,以此类推。在单击时的回调函数中,我们需要知道点击后当前处于的状态,在回调函数中可以这样做来获得当前的状态信息:
voID Menulayer4::menuCloseCallback(CCObject* pSender){	CcmenuItemToggle* btn = (CcmenuItemToggle*)pSender;	switch (btn->getSelectedindex())	{	case 0:		...		break;	case 1:		...		break;	case 2:		...		break;	default:		break;	}}
效果:
我们在回调函数中可以知道当前发生的单击事件的对象,也就是回调函数的参数 CCObject* pSender,因为我们知道发生回调函数的控件是 CcmenuItemToggle类型的,所以将参数强制转换为这个类型的对象,接下来我们就可以使用 CcmenuItemToggle类提供的 getSelectedindex()函数取得当前的状态 ID,0表示当前为“Easy”状态,按照顺序1表示“Nomal”状态,2表示"Hard"状态。这样,我们就可以通过当前的状态 ID,做出相应的处理。 总结

以上是内存溢出为你收集整理的Cocos2d-x学习笔记(七)-------->Button控件全部内容,希望文章能够帮你解决Cocos2d-x学习笔记(七)-------->Button控件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存