cocos2d-x 3.4 之 文字按钮与图片按钮(更新I)
来源:互联网 发布:360赚钱软件 编辑:程序博客网 时间:2024/06/10 12:46
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
cocos2d-x 中用按钮地方很多,发现之前也没写过(其实真没什么可写的)。
今天正好用到文字按钮这块,就弄了个Demo耍了下,记录一下。
PS:宿舍现在是真冷啊,手冻得都哆嗦,每每睡觉前我都想到一句诗:布衾多年冷似铁。。。
>>>图片按钮
通过MenuItemImage来实现
做一些准备工作,
就是先设定一个Label,
方便展现按钮实现的动作:
// 为普通按钮设置的Labelauto label1 = Label::create("Go!","fonts/Marker Felt.ttf", 24);label1->setPosition(Vec2(visibleSize.width/2,visibleSize.height-label1->getContentSize().height*2));label1->setTag(10);this->addChild(label1);
// 为图片开关按钮设置个Labelauto label = Label::createWithTTF("Hello World!", "fonts/Marker Felt.ttf", 24);label->setPosition(Vec2(visibleSize.width/2+_turnOn->getContentSize().width,visibleSize.height/2));label->setTag(11);this->addChild(label);
// 为文字开关按钮设置个Labelauto label2 = Label::createWithTTF("Hello!", "fonts/Marker Felt.ttf", 24);label2->setPosition(Vec2(visibleSize.width/2+_turnOn->getContentSize().width,visibleSize.height/2-imageItem->getContentSize().height));label2->setTag(13);this->addChild(label2);
Tag的设定,是为了在回调函数得到相应Label,从而好对它实施操作。
>首先是一个简单的按钮(就是按的时候有点小变化,通过回调函数来实现动作)
void WelcomeScene::menuImgCallback(Ref* pSender){Label* label = (Label* )this->getChildByTag(10);auto actionBy = MoveBy::create(1, Vec2(80,0));auto actionByBack = 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));
它的回调函数:
void WelcomeScene::menuSwitchCallback(Ref* pSender){MenuItemToggle *toggleItem = (CCMenuItemToggle *)pSender; Label* label = (Label* )this->getChildByTag(11);if (toggleItem->selectedItem() == _turnOn){ label->setString("Hello World!"); } else if (toggleItem->selectedItem() == _turnOff){ label->setString("Bye World!"); }}
回调函数就是在 “Hello World!”和“Bye World!”之间切换。
>>>接下来是文字按钮
> 简单的文字按钮
其实和图片按钮差不多,只不过,图片按钮用MenuItemImage,而文字按钮是用MenuItemFont
// 文字按钮auto wordItem = MenuItemFont::create("Start",CC_CALLBACK_1(WelcomeScene::menuImgCallback,this));wordItem->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2+imageItem->getContentSize().height*2));
回调函数和图片按钮共用一个
> 文字开关按钮
殊途同归,原理差不多
_turnOn1 = MenuItemFont::create("On");_turnOff1 = MenuItemFont::create("Off");MenuItemToggle *switchItem1 = MenuItemToggle::createWithCallback(CC_CALLBACK_1(WelcomeScene::menuSwitchCallback1,this),_turnOn1,_turnOff1,NULL);switchItem1->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2-imageItem->getContentSize().height));
回调函数:
void WelcomeScene::menuSwitchCallback1(Ref* pSender){MenuItemToggle *toggleItem = (CCMenuItemToggle *)pSender; Label* label = (Label* )this->getChildByTag(13);if (toggleItem->selectedItem() == _turnOn1){ label->setString("Hello!"); } else if (toggleItem->selectedItem() == _turnOff1){ label->setString("Bye!"); }}
-------------------------------------------------------------更新---------------------------------------------------------------------------------------
这里主要是对于文字开关按钮的改动,
有时候为了一个无用的按钮,还要在全局设置一个变量,比较麻烦切不爽的,
所以可以用下面这种方法生成 On and Off的开关按钮:
MenuItemFont::setFontName("fonts/Marker Felt.ttf");MenuItemFont::setFontSize(34);MenuItemToggle *switchItem1 = MenuItemToggle::createWithCallback(CC_CALLBACK_1(WelcomeScene::menuSwitchCallback1,this),MenuItemFont::create("On"),MenuItemFont::create("Off"),NULL );switchItem1->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2-imageItem->getContentSize().height));
这样就不需要额外的设置两个MenuItemFont的全局变量了,
但如果这样,我们回调函数就会出问题了,
原来回调函数是这样的:
void WelcomeScene::menuSwitchCallback1(Ref* pSender){MenuItemToggle *toggleItem = (CCMenuItemToggle *)pSender; Label* label = (Label* )this->getChildByTag(13);if (toggleItem->selectedItem() == _turnOn1){ label->setString("Hello!"); } else if (toggleItem->selectedItem() == _turnOff1){ label->setString("Bye!"); }}
没有了全局变量_turnOn1 和 _turnOff1 如何判断当前的按钮是哪个呢?
——这里有个新函数——getSelectedIndex
对于MenuItemToogle::createWithCallback,追踪到定义,可以发现:
static MenuItemToggle * createWithCallback(const ccMenuCallback& callback, const Vector<MenuItem*>& menuItems);
它的最后一个参数是一个集合,所以按钮可以是多个的,既然是Vector,就会有个Index
这个getSelectedIndex函数就是获取当前被选中的MenuItem序号,
所以,我们回调函数可以这么写:
void WelcomeScene::menuSwitchCallback1(Ref* pSender){MenuItemToggle *toggleItem = (CCMenuItemToggle *)pSender; Label* label = (Label* )this->getChildByTag(13);switch ( toggleItem->getSelectedIndex() ){case 0:label->setString("Hello!");break;case 1:label->setString("Bye!");break;default:break;}}
就是这样了~O(∩_∩)O~
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
- cocos2d-x 3.4 之 文字按钮与图片按钮(更新I)
- cocos2d-x 3.4 之 文字按钮与图片按钮ZZ
- cocos2d-x 3.0 图片按钮,文字按钮,菜单按钮,单选按钮,开关按钮
- Cocos2d-x 按钮点击切换按钮图片
- cocos2d-x学习总结—文字按钮
- cocos2d-x 成排的文字按钮
- 【Cocos2d-x游戏开发lua篇之基础】加载图片与设置按钮监听事件
- 【学习笔记】cocos2d-x 如何创建一个按钮(文本按钮、图片按钮)
- 导航右边按钮按钮(图片/文字)
- cocos2d-x学习笔记—图片按钮
- COCOS2D-x添加图片按钮步骤总结
- Cocos2d-x CCMenuItemSprite按钮图片旋转问题
- cocos2d-x学习笔记—图片按钮
- cocos2d-x UI之技能冷却按钮 (转)
- Cocos2d-x的学习之旅(五)菜单按钮
- cocos2d-x学习之按钮Menu
- cocos2d-x UI之技能冷却按钮
- cocos2d-x UI之技能冷却按钮
- J2EE的13种核心技术
- 大话设计模式——面向对象基础初理解
- FTP命令的模式
- 黑马程序员-C语言学习笔记-----内存分配函数(malloc、calloc、realloc)
- Ant学习笔记--入门
- cocos2d-x 3.4 之 文字按钮与图片按钮(更新I)
- CLOCK_MONOTONIC and CLOCK_REALTIME .
- Masonry和scrollView的结合使用,在手机横屏的状态也能看到竖屏时的内容
- 产生1-num的随机数,总共产生num组,C++,Python
- DrawerLayout实现侧滑
- groovy脚本导致的FullGC问题
- delphi获取目录下所有文件名[delphi]
- 1,Linux入门
- hdu 1505 City Game 最大矩形面积 单调队列