Cocos2dx 3.0 過渡篇(七)EditBox和ControlSlider不得不說的故事
尊重原創,轉載請注明來自:star特530的CSDN博客 https://blog.csdn.net/start530/article/details/18993085
初八開始上班,我竟然能馬上進入工作狀態,真是蠻佩服自己的。
正月放假這階段發生了好多事。對我的影響很大。
消沉了好幾天,現在,我滿血滿狀態的複活了。我是 這麼容易放棄的人麼?既然舍不得,就不該輕言放棄!即使希望渺茫,還是應該努力爭取下!
程序員之路,就是應該克服各種艱難險阻,將不可能變成可能。
---------機智的少年,你要勇敢往前衝~~~嘿!~
---------------------------------------------------------------
這次就寫個輸入框和拖動條的結合使用吧。
也就是在EditBox中輸入數值後,ControlSlider的狀態會發生改變;拖動ControlSlider後,EditBox的數值也會發生改變。
過程如下:
1、 添加EditBox和ControlSlider到場景中;
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、 添加EditBox和ControlSlider
- 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的值
- }
恩,就是這樣,效果如圖:
轉發請注明來源:
https://blog.csdn.net/start530?viewmode=contents
最後更新:2017-04-03 12:56:08