1、概述
? ? 上篇說到將CocoStudio的導出文件在程序中運行出來,但是并沒有用戶交互,即點擊響應,程序的邏輯判斷也都沒有。這篇中我們把它們加進去,這樣就可以算一個完整的程序了。先上個圖:
??
? ? 運行后,點擊開始,進度條,數(shù)字增加,通過slider可以調(diào)整進度條增長的速度。
?
2、界面編輯
? ? 大部分界面編輯都在CocoStudio中完成,怎么編輯可以參照:?
Cocos2d-x 3.0 開發(fā)(四)使用CocoStudio創(chuàng)建UI并載入到程序中?
。
? ? 現(xiàn)在我們要做的工作是將所需要交互控件的Tag記下來,這樣我們可以通過Tag找到這個控件。
? ? 將Tag整理后我將其記錄到一個.h文件中這樣在工程中就可以使用了:
?
[cpp] view plaincopyprint?
const?int?UI_BUTTON_CLEAR?=?8;??const?int?UI_BUTTON_START?=?9;??const?int?UI_SLIDER_SPEED?=?10;??const?int?UI_LOADINGBAR_LOADING?=?3;??const?int?UI_LABELATLAS_LIFENUM?=?7;?? ?
? ? 由于此處tag是CocoStudio自己生成的,所以跟大家自己可能不一樣,要根據(jù)自己的進行更改。
? ? 記錄好之后導出文件到我們的工程中。
?
3、程序關聯(lián)
? ? 關聯(lián)的核心在于設置響應函數(shù)、讀取與改變控件狀態(tài)。
? ? 首先,我在init中將Layout讀入,存儲為類的成員變量m_layout。不太會弄的同學可參考上一篇博客。
?
1、響應函數(shù)的設置
? ? ?按鈕是要有響應函數(shù)的,由于它是UIWidget的一個子類,所以采用的是TouchEvent的回調(diào)方式,看不太明白的同學可以參考:?
Cocos2d-x 3.0開發(fā)(三)點擊交互的四種處理
。
?
[cpp] view plaincopyprint?
void?touchButton(Object*?obj,cocos2d::extension::TouchEventType?eventType);????UIButton*?startBtn?=?dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));??startBtn->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));????UIButton*?pauseBtn?=?dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_CLEAR));??pauseBtn->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));????void?HelloWorld::touchButton(Object*?obj,TouchEventType?eventType)??{??????auto?button?=?dynamic_cast<UIButton*>(obj);??????int?tag?=?button->getTag();??????switch(eventType)??????{??????case?TouchEventType::TOUCH_EVENT_ENDED:??????????if(tag?==?UI_BUTTON_START)??????????{??????????????changeRunning();??????????}??????????else??????????{??????????????clearRunning();??????????}??????}??}?? ?
? ? 值得注意的是這個場景中有兩個按鈕,我們可以采用Tag來進行區(qū)分。
?
2、控件的讀取與更改
? ? 對于進度條和數(shù)字,我們需要做的是讀取它的狀態(tài),并對它進行改變。在這個例子中我們需要在schedule的回調(diào)函數(shù)中做。Schedule的相關知識比較簡單,此處不做討論,有興趣的同學可查閱其他資料。
?
[cpp] view plaincopyprint?
void?HelloWorld::runningSchedule(float?dt)??{??????int?speed?=?dynamic_cast<UISlider*>(m_layout->getChildByTag(UI_SLIDER_SPEED))->getPercent();??????auto?loadingBar?=?dynamic_cast<UILoadingBar*>(m_layout->getChildByTag(UI_LOADINGBAR_LOADING));??????int?prc?=?loadingBar->getPercent()?+?speed?/?15;??????if(prc?>?100)??????{??????????prc?=?1;??????}??????loadingBar->setPercent(prc);????????????auto?numLabel?=?dynamic_cast<UILabelAtlas*>(m_layout->getChildByTag(UI_LABELATLAS_LIFENUM));??????int?num?=?atoi(numLabel->getStringValue());??????num++;??????char?buff[100];??????sprintf_s(buff,"%d",num);??????numLabel->setStringValue(buff);????}??????void?HelloWorld::clearRunning()??{??????if(m_isRunning)??????{??????????changeRunning();??????}????????dynamic_cast<UILabelAtlas*>(m_layout->getChildByTag(UI_LABELATLAS_LIFENUM))->setStringValue("1");??????dynamic_cast<UILoadingBar*>(m_layout->getChildByTag(UI_LOADINGBAR_LOADING))->setPercent(1);??????dynamic_cast<UISlider*>(m_layout->getChildByTag(UI_SLIDER_SPEED))->setPercent(1);??}??void?HelloWorld::changeRunning()??{??????if(m_isRunning)??????{??????????????????this->unschedule(schedule_selector(HelloWorld::runningSchedule));??????????m_isRunning?=?false;??????????UIButton*?button?=?dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));??????????button->setTitleText("運行");??????}??????else??????{??????????????????this->schedule(schedule_selector(HelloWorld::runningSchedule));??????????m_isRunning?=?true;??????????UIButton*?button?=?dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));??????????button->setTitleText("暫停");??????}??}?? ?
? ? 編譯運行,即可看到效果啦。
4、總結
? ? ?通過建立一個Tag的索引表來找到UI中的控件資源,然后取到對其進行操作。這其中可能會有的問題是,如果多個UI控件被加載Tag可能會重復,大家要注意這點。希望cocoStudio在未來的版本中能夠?qū)ag索引表導出成資源的.h文件。
?
? ? Demo下載:http://download.csdn.net/detail/fansongy/6410109?
?
? ? 本篇博客出自阿修羅道,轉(zhuǎn)載請注明出處,禁止用于商業(yè)用途:http://blog.csdn.net/fansongy/article/details/12795299?
轉(zhuǎn)載于:https://www.cnblogs.com/dudu580231/p/4983702.html
總結
以上是生活随笔為你收集整理的实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。