您的位置:首页 > 移动开发 > Cocos引擎

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

2014-04-09 17:04 302 查看
尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/18993085

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

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

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

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

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

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

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

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

过程如下:

1、 添加EditBox和ControlSlider到场景中;

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

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



代码:

头文件主要代码:

[cpp] view
plaincopy





#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__



#include "cocos2d.h"

#include "cocos-ext.h"



USING_NS_CC;

USING_NS_CC_EXT;



class HelloWorld : public cocos2d::Layer,public EditBoxDelegate

{

public:

static cocos2d::Scene* createScene();

virtual bool init();



void menuCloseCallback(Object* pSender);



CREATE_FUNC(HelloWorld);



//输入伪托

void editBoxEditingDidBegin(EditBox* editBox);

void editBoxEditingDidEnd(EditBox* editBox);

void editBoxTextChanged(EditBox* editBox, const std::string& text);

void editBoxReturn(EditBox* editBox);



//滑杆回调

void slideCallback(Object *sender, Control::EventType controlEvent);

};



#endif // __HELLOWORLD_SCENE_H__

1、 添加EditBox和ControlSlider

[cpp] view
plaincopy





bool HelloWorld::init()

{

if ( !Layer::init() )

{

return false;

}



Size visibleSize = Director::getInstance()->getVisibleSize();

Point origin = Director::getInstance()->getVisibleOrigin();



auto label = LabelTTF::create("Hello World", "Arial", 24);

label->setPosition(Point(origin.x + visibleSize.width/2,

origin.y + visibleSize.height - label->getContentSize().height));

this->addChild(label, 1);



//EditBox

auto inputBox = Sprite::create("inputBox.png");//添加输入框的背景框

inputBox->setPosition(Point(visibleSize.width/2,visibleSize.height/3));

this->addChild(inputBox,1);



EditBox* editBox = EditBox::create(Size(100, 35.0), Scale9Sprite::create());//创建EditBox,第一个参数设置输入框的大小,第二个参数和和“九妹”相关

editBox->setPosition(Point(visibleSize.width/2,visibleSize.height/3));

// editBox->setPlaceHolder("请输入数字");//设置editBox输入为空时的显示状态

editBox->setInputMode(EditBox::InputMode::NUMERIC);//输入模式,这里设置为数字

editBox->setDelegate(this);//开启委托

editBox->setFontColor(Color3B::BLACK);//设置文字颜色

editBox->setText("0");//设置默认显示数字

editBox->setTag(10);

this->addChild(editBox,2);



//ControlSlider

//创建controlSlide,第一个参数为拖动前的图片,第二个参数为拖动后的图片,第三个参数为拖动杆

auto slide_control = ControlSlider::create("sliderProgress.png","sliderTrack.png","sliderThumb.png");

slide_control->setPosition(Point(visibleSize.width/2,visibleSize.height/2));

slide_control->setMinimumValue(0.0f);//设置最小值

slide_control->setMaximumValue(100.0f);//设置最大值

slide_control->setValue(0.0f);//设置初始值

slide_control->setTag(20);

slide_control->addTargetWithActionForControlEvents(this,cccontrol_selector(HelloWorld::slideCallback),Control::EventType::VALUE_CHANGED);//设置拖动回调

this->addChild(slide_control,2);





return true;

}

效果如图所示:



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

[cpp] view
plaincopy





void HelloWorld::editBoxTextChanged(EditBox* editBox, const std::string& text)

{

int num_int = std::atoi(text.c_str());//将字符串转成整型

int maxNum = 100;//因为controlSlider 的最大值为100,所以这里输入的值最大也不能超过100

if(num_int > maxNum)

{

num_int = maxNum;

}



char buf_str[16];

sprintf(buf_str,"%d",num_int);//将int的数值放入buf_str中

editBox->setText(buf_str);//重新设置editBox的值



//改变ControlSlider的值

auto slide = (ControlSlider*)this->getChildByTag(20);//通过tag获取controlSlider

slide->setValue((float)num_int);//重新设置slide的值



}

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

[cpp] view
plaincopy





void HelloWorld::slideCallback(Object *sender, Control::EventType controlEvent)

{

auto slide_control = (ControlSlider*)sender;//通过回调参数sender 获得ControlSlider

int current_value = slide_control->getValue();//获取slide当前的值



char buf_str[16];

sprintf(buf_str,"%d",current_value);



auto editBox = (EditBox*)this->getChildByTag(10);//通过tag获得EditBox

editBox->setText(buf_str);//设置editBox的值

}

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



转发请注明来源:

http://blog.csdn.net/start530?viewmode=contents
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: