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

來源:互聯網
上載者:User

初八開始上班,我竟然能馬上進入工作狀態,真是蠻佩服自己的。

正月放假這階段發生了好多事。對我的影響很大。

消沉了好幾天,現在,我滿血滿狀態的複活了。我是 這麼容易放棄的人嗎?既然捨不得,就不該輕言放棄!即使希望渺茫,還是應該努力爭取下!

程式員之路,就是應該克服各種艱難險阻,將不可能變成可能。

---------機智的少年,你要勇敢往前沖~~~嘿!~

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

這次就寫個輸入框和拖動條的結合使用吧。

也就是在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






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.