日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、概述

? ? 上篇說到將CocoStudio的導出文件在程序中運行出來,但是并沒有用戶交互,即點擊響應,程序的邏輯判斷也都沒有。這篇中我們把它們加進去,這樣就可以算一個完整的程序了。先上個圖:

??

? ? 運行后,點擊開始,進度條,數字增加,通過slider可以調整進度條增長的速度。

?

2、界面編輯

? ? 大部分界面編輯都在CocoStudio中完成,怎么編輯可以參照:?

Cocos2d-x 3.0 開發(四)使用CocoStudio創建UI并載入到程序中?

? ? 現在我們要做的工作是將所需要交互控件的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自己生成的,所以跟大家自己可能不一樣,要根據自己的進行更改。

    ? ? 記錄好之后導出文件到我們的工程中。

    ?

    3、程序關聯

    ? ? 關聯的核心在于設置響應函數、讀取與改變控件狀態。

    ? ? 首先,我在init中將Layout讀入,存儲為類的成員變量m_layout。不太會弄的同學可參考上一篇博客。

    ?

    1、響應函數的設置

    ? ? ?按鈕是要有響應函數的,由于它是UIWidget的一個子類,所以采用的是TouchEvent的回調方式,看不太明白的同學可以參考:?

    Cocos2d-x 3.0開發(三)點擊交互的四種處理

    ?

    [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來進行區分。

    ?

    2、控件的讀取與更改

    ? ? 對于進度條和數字,我們需要做的是讀取它的狀態,并對它進行改變。在這個例子中我們需要在schedule的回調函數中做。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)??
  • ????{??
  • ????????//pause??
  • ????????this->unschedule(schedule_selector(HelloWorld::runningSchedule));??
  • ????????m_isRunning?=?false;??
  • ????????UIButton*?button?=?dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));??
  • ????????button->setTitleText("運行");??
  • ????}??
  • ????else??
  • ????{??
  • ????????//start??
  • ????????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在未來的版本中能夠將Tag索引表導出成資源的.h文件。

    ?

    ? ? Demo下載:http://download.csdn.net/detail/fansongy/6410109?

    ?

    ? ? 本篇博客出自阿修羅道,轉載請注明出處,禁止用于商業用途:http://blog.csdn.net/fansongy/article/details/12795299?

    轉載于:https://www.cnblogs.com/dudu580231/p/4983702.html

    總結

    以上是生活随笔為你收集整理的实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。