cocos2d-x 3.4 之 文字按钮与图片按钮ZZ

cocos2d-x 3.4 之 文字按钮与图片按钮ZZ,第1张

概述***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** cocos2d-x 中用按钮地方很多,发现之前也没写过(其实真没什么可写的)。 今天正好用到文字按钮这块,就弄了个Demo耍了下,记录一下。 PS:宿舍现在是真冷

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************


cocos2d-x 中用按钮地方很多,发现之前也没写过(其实真没什么可写的)。

今天正好用到文字按钮这块,就弄了个Demo耍了下,记录一下。

PS:宿舍现在是真冷啊,手冻得都哆嗦,每每睡觉前我都想到一句诗:布衾多年冷似铁。。。


>>>图片按钮

通过MenuItemImage来实现

做一些准备工作,

就是先设定一个Label,

方便展现按钮实现的动作:

[cpp] view plain copy print ? //为普通按钮设置的Label autolabel1=Label::create("Go!","Fonts/MarkerFelt.ttf",24); label1->setposition(Vec2(visibleSize.wIDth/2,visibleSize.height-label1->getContentSize().height*2)); label1->setTag(10); this->addChild(label1);
//为图片开关按钮设置个Label autolabel=Label::createWithTTF("HelloWorld!",226)"> label->setposition(Vec2(visibleSize.wIDth/2+_turnOn->getContentSize().wIDth,visibleSize.height/2)); label->setTag(11); this->addChild(label);
//为文字开关按钮设置个Label
autolabel2=Label::createWithTTF("Hello!",226)"> label2->setposition(Vec2(visibleSize.wIDth/2+_turnOn->getContentSize().wIDth,visibleSize.height/2-imageItem->getContentSize().height)); label2->setTag(13); this->addChild(label2);

Tag的设定,是为了在回调函数得到相应Label,从而好对它实施 *** 作。

>首先是一个简单的按钮(就是按的时候有点小变化,通过回调函数来实现动作)

voIDWelcomeScene::menuimgCallback(Ref*pSender) { Label*label=(Label*)this->getChildByTag(10); autoactionBy=MoveBy::create(1,Vec2(80,0)); autoactionByBack=actionBy->reverse(); label->runAction(Sequence::create(actionBy,actionByBack,NulL)); }
回调函数实现的动作就是,将Label在1秒内向右移动80单位,并移动回来。


>然后是开关按钮(这个就不需要解释了。。)

为了简单,就直接在头文件定义:

MenuItemImage*_turnOn,*_turnOff;
然后是按钮的制作:

//开关按钮 _turnOn=MenuItemImage::create( "btn_musOn.png", "btn_musOn.png"); _turnOff=MenuItemImage::create( "btn_musOff.png", "btn_musOff.png"); MenuItemToggle*switchItem=MenuItemToggle::createWithCallback(CC_CALLBACK_1(WelcomeScene::menuSwitchCallback,this),_turnOn,_turnOff,NulL); switchItem->setposition(Vec2(visibleSize.wIDth/2,visibleSize.height/2));
它的回调函数:

voIDWelcomeScene::menuSwitchCallback(Ref*pSender) MenuItemToggle*toggleItem=(CcmenuItemToggle*)pSender; Label*label=(Label*)this->getChildByTag(11); if(toggleItem->selectedItem()==_turnOn){ label->setString("HelloWorld!"); } elseif(toggleItem->selectedItem()==_turnOff){ label->setString("ByeWorld!"); } 回调函数就是在 “Hello World!”和“Bye World!”之间切换。

>>>接下来是文字按钮

> 简单的文字按钮

其实和图片按钮差不多,只不过,图片按钮用MenuItemImage,而文字按钮是用MenuItemFont

//文字按钮 autowordItem=MenuItemFont::create("Start",CC_CALLBACK_1(WelcomeScene::menuimgCallback,this)); wordItem->setposition(Vec2(visibleSize.wIDth/2,visibleSize.height/2+imageItem->getContentSize().height*2));
回调函数和图片按钮共用一个

> 文字开关按钮

殊途同归,原理差不多

@H_14_502@ _turnOn1=MenuItemFont::create("On"); _turnOff1=MenuItemFont::create("Off"); MenuItemToggle*switchItem1=MenuItemToggle::createWithCallback(CC_CALLBACK_1(WelcomeScene::menuSwitchCallback1,_turnOn1,_turnOff1,NulL); switchItem1->setposition(Vec2(visibleSize.wIDth/2,visibleSize.height/2-imageItem->getContentSize().height));
回调函数:

voIDWelcomeScene::menuSwitchCallback1(Ref*pSender) Label*label=(Label*)this->getChildByTag(13); if(toggleItem->selectedItem()==_turnOn1){ label->setString("Hello!"); elseif(toggleItem->selectedItem()==_turnOff1){ label->setString("Bye!"); -------------------------------------------------------------更新---------------------------------------------------------------------------------------

这里主要是对于文字开关按钮的改动,

有时候为了一个无用的按钮,还要在全局设置一个变量,比较麻烦切不爽的,

所以可以用下面这种方法生成 On and Off的开关按钮:

MenuItemFont::setFontname("Fonts/MarkerFelt.ttf"); MenuItemFont::setFontSize(34); MenuItemFont::create("On"),226)"> MenuItemFont::create("Off"),226)"> NulL); 这样就不需要额外的设置两个MenuItemFont的全局变量了,

但如果这样,我们回调函数就会出问题了,

原来回调函数是这样的:

没有了全局变量_turnOn1 和 _turnOff1 如何判断当前的按钮是哪个呢?

——这里有个新函数——getSelectedindex

对于MenuItemToogle::createWithCallback,追踪到定义,可以发现:

staticMenuItemToggle*createWithCallback(constccmenuCallback&callback,constVector<MenuItem*>&menuItems);
它的最后一个参数是一个集合,所以按钮可以是多个的,既然是Vector,就会有个Index

这个getSelectedindex函数就是获取当前被选中的MenuItem序号,

所以,我们回调函数可以这么写:

switch(toggleItem->getSelectedindex()) case0:label->setString("Hello!"); break; case1:label->setString("Bye!"); default: 就是这样了~O(∩_∩)O~

http://blog.csdn.net/lttree********************************************

总结

以上是内存溢出为你收集整理的cocos2d-x 3.4 之 文字按钮与图片按钮ZZ全部内容,希望文章能够帮你解决cocos2d-x 3.4 之 文字按钮与图片按钮ZZ所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1067989.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存