Cocos2dx 3.0 提高篇(七)EditBox和ControlSlider不得不说的故事

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

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

迫于家庭压力,谈了四年的女友和我提出了分手,是的,她做出了这个决定。我很难受,她也很痛苦。

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

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

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

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

鉴于我和她的故事,所以本篇博文也是两个“人"的故事:EditBox 和 ControlSlider。

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

过程如下:

1、 添加EditBoxControlSlider到场景中;

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

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

 

代码:

头文件主要代码:

#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、 添加EditBoxControlSlider

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() 函数里更改代码

        
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进行判断

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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值