初八開始上班,我竟然能馬上進入工作狀態,真是蠻佩服自己的。
正月放假這階段發生了好多事。對我的影響很大。
消沉了好幾天,現在,我滿血滿狀態的複活了。我是 這麼容易放棄的人嗎?既然捨不得,就不該輕言放棄!即使希望渺茫,還是應該努力爭取下!
程式員之路,就是應該克服各種艱難險阻,將不可能變成可能。
---------機智的少年,你要勇敢往前沖~~~嘿!~
---------------------------------------------------------------
這次就寫個輸入框和拖動條的結合使用吧。
也就是在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);//EditBoxauto 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,所以這裡輸入的值最大也不能超過100if(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擷取controlSliderslide->setValue((float)num_int);//重新設定slide的值}
3、 當改變ControlSlider的狀態時,對它相對應的回呼函數slideCallback()函數的代碼修改如下:
void HelloWorld::slideCallback(Object *sender, Control::EventType controlEvent){auto slide_control = (ControlSlider*)sender;//通過回調參數sender 獲得ControlSliderint current_value = slide_control->getValue();//擷取slide當前的值char buf_str[16];sprintf(buf_str,"%d",current_value);auto editBox = (EditBox*)this->getChildByTag(10);//通過tag獲得EditBoxeditBox->setText(buf_str);//設定editBox的值}
恩,就是這樣,效果
轉寄請註明來源:
http://blog.csdn.net/start530?viewmode=contents