Cocos2dx 3.0 过渡篇(七)EditBox和ControlSlider不得不说的故事

简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:14.44444465637207px; line-height:26px"> 尊重原创,转载请注明来自:star特530的CSDN博客  <a target="_blank" href="http://blog.csdn.net/start530/article/de

尊重原创,转载请注明来自:star特530的CSDN博客  http://blog.csdn.net/start530/article/details/18993085

初八开始上班,我竟然能马上进入工作状态,真是蛮佩服自己的。

正月放假这阶段发生了好多事。对我的影响很大。

消沉了好几天,现在,我满血满状态的复活了。我是 这么容易放弃的人么?既然舍不得,就不该轻言放弃!即使希望渺茫,还是应该努力争取下!

程序员之路,就是应该克服各种艰难险阻,将不可能变成可能。

---------机智的少年,你要勇敢往前冲~~~嘿!~

 ---------------------------------------------------------------

这次就写个输入框和拖动条的结合使用吧。

也就是在EditBox中输入数值后,ControlSlider的状态会发生改变;拖动ControlSlider后,EditBox的数值也会发生改变。

过程如下:

1、 添加EditBoxControlSlider到场景中;

2、 当EditBox的数值发生改变时,改变ControlSlider的状态;

3、 当ControlSlider的状态发生改变时,改变EditBox的值。

 

代码:

头文件主要代码:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #ifndef __HELLOWORLD_SCENE_H__  
  2. #define __HELLOWORLD_SCENE_H__  
  3.   
  4. #include "cocos2d.h"  
  5. #include "cocos-ext.h"  
  6.   
  7. USING_NS_CC;  
  8. USING_NS_CC_EXT;  
  9.   
  10. class HelloWorld : public cocos2d::Layer,public EditBoxDelegate  
  11. {  
  12. public:  
  13.     static cocos2d::Scene* createScene();  
  14.     virtual bool init();    
  15.       
  16.     void menuCloseCallback(Object* pSender);  
  17.       
  18.     CREATE_FUNC(HelloWorld);  
  19.   
  20.     //输入伪托  
  21.     void editBoxEditingDidBegin(EditBox* editBox);  
  22.     void editBoxEditingDidEnd(EditBox* editBox);  
  23.     void editBoxTextChanged(EditBox* editBox, const std::string& text);  
  24.     void editBoxReturn(EditBox* editBox);  
  25.   
  26.     //滑杆回调  
  27.     void slideCallback(Object *sender, Control::EventType controlEvent);  
  28. };  
  29.   
  30. #endif // __HELLOWORLD_SCENE_H__  

1、 添加EditBoxControlSlider

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. bool HelloWorld::init()  
  2. {  
  3.     if ( !Layer::init() )  
  4.     {  
  5.         return false;  
  6.     }  
  7.       
  8.     Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.     Point origin = Director::getInstance()->getVisibleOrigin();  
  10.       
  11.     auto label = LabelTTF::create("Hello World""Arial", 24);  
  12.     label->setPosition(Point(origin.x + visibleSize.width/2,  
  13.                             origin.y + visibleSize.height - label->getContentSize().height));  
  14.     this->addChild(label, 1);  
  15.   
  16.     //EditBox  
  17.     auto inputBox = Sprite::create("inputBox.png");//添加输入框的背景框  
  18.     inputBox->setPosition(Point(visibleSize.width/2,visibleSize.height/3));  
  19.     this->addChild(inputBox,1);  
  20.   
  21.     EditBox* editBox = EditBox::create(Size(100, 35.0), Scale9Sprite::create());//创建EditBox,第一个参数设置输入框的大小,第二个参数和和“九妹”相关  
  22.     editBox->setPosition(Point(visibleSize.width/2,visibleSize.height/3));  
  23. //  editBox->setPlaceHolder("请输入数字");//设置editBox输入为空时的显示状态  
  24.     editBox->setInputMode(EditBox::InputMode::NUMERIC);//输入模式,这里设置为数字  
  25.     editBox->setDelegate(this);//开启委托  
  26.     editBox->setFontColor(Color3B::BLACK);//设置文字颜色  
  27.     editBox->setText("0");//设置默认显示数字  
  28.     editBox->setTag(10);  
  29.     this->addChild(editBox,2);  
  30.   
  31.     //ControlSlider  
  32.     //创建controlSlide,第一个参数为拖动前的图片,第二个参数为拖动后的图片,第三个参数为拖动杆  
  33.     auto slide_control = ControlSlider::create("sliderProgress.png","sliderTrack.png","sliderThumb.png");  
  34.     slide_control->setPosition(Point(visibleSize.width/2,visibleSize.height/2));  
  35.     slide_control->setMinimumValue(0.0f);//设置最小值  
  36.     slide_control->setMaximumValue(100.0f);//设置最大值  
  37.     slide_control->setValue(0.0f);//设置初始值  
  38.     slide_control->setTag(20);  
  39.     slide_control->addTargetWithActionForControlEvents(this,cccontrol_selector(HelloWorld::slideCallback),Control::EventType::VALUE_CHANGED);//设置拖动回调      
  40.     this->addChild(slide_control,2);  
  41.   
  42.       
  43.     return true;  
  44. }  

效果如图所示:



2、当EditBox的数值发生改变时,对editBoxTextChanged()函数里的代码修改如下:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void HelloWorld::editBoxTextChanged(EditBox* editBox, const std::string& text)  
  2. {  
  3.     int num_int = std::atoi(text.c_str());//将字符串转成整型  
  4.     int maxNum = 100;//因为controlSlider 的最大值为100,所以这里输入的值最大也不能超过100  
  5.     if(num_int > maxNum)  
  6.     {  
  7.         num_int = maxNum;  
  8.     }  
  9.   
  10.     char buf_str[16];  
  11.     sprintf(buf_str,"%d",num_int);//将int的数值放入buf_str中  
  12.     editBox->setText(buf_str);//重新设置editBox的值  
  13.       
  14.     //改变ControlSlider的值  
  15.     auto slide = (ControlSlider*)this->getChildByTag(20);//通过tag获取controlSlider  
  16.     slide->setValue((float)num_int);//重新设置slide的值  
  17.   
  18. }  

3、 当改变ControlSlider的状态时,对它相对应的回调函数slideCallback()函数的代码修改如下:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void HelloWorld::slideCallback(Object *sender, Control::EventType controlEvent)  
  2. {  
  3.     auto slide_control = (ControlSlider*)sender;//通过回调参数sender 获得ControlSlider  
  4.     int current_value = slide_control->getValue();//获取slide当前的值  
  5.   
  6.     char buf_str[16];  
  7.     sprintf(buf_str,"%d",current_value);  
  8.   
  9.     auto editBox = (EditBox*)this->getChildByTag(10);//通过tag获得EditBox  
  10.     editBox->setText(buf_str);//设置editBox的值  
  11. }  


恩,就是这样,效果如图:





转发请注明来源:

http://blog.csdn.net/start530?viewmode=contents


相关文章
|
6月前
|
图形学
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
237 0
|
前端开发 JavaScript 小程序
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
这几天一直在做混合开发,使用的是uni-app开发的,一套代码,多端使用,适用于各个平台。听起来很完美,使用过程不可多说,不知道是因为我们的需求变态还是我们团队两端技术水平太差。总之,开发联调过程十分痛苦,加上uniapp的调试十分困难,一度让我们两端互怼。这其中我印象最深的一个bug就是在对接联调总出现的
1665176 33
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity 中 使用代码切换天空盒
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】☀️ | Unity 中 使用代码切换天空盒
|
JavaScript Android开发 C++
【Cocos2d-x】开发基础-第一个Cocos2d-x游戏
【Cocos2d-x】开发基础-第一个Cocos2d-x游戏
232 0
|
iOS开发 开发工具 git
从案例出发,由浅到深了解 iOS 动画
收录:原文地址 前言 iOS 的动画框架很成熟,提供必要的信息,譬如动画的起始位置与终止位置,动画效果就出来了 动画的实现方式挺多的, 有系统提供的简单 API ,直接提供动画般的交互效果。 有手动设置交互效果,看起来像是动画,一般要用到插值。
1069 0