cocos2d-x之CCGUI設計與實現(4)分頁列表框的實現(仿IOS表徵圖分頁列表)

來源:互聯網
上載者:User

本篇主要介紹IOS應用表徵圖案頭的分頁效果設計,這種控制項主要用於RPG等遊戲的背包部分,算是很常用的了。

分頁列表框暫且命名為GridBox,繼承自ScrollView,擁有滾動屬性和分頁屬性,這裡簡單討論後者的實現思路。

cocos2d-x擴充提供的CCScrollView支援滑動,滑動的具體實現是這樣的:

(1)  touch begin時初始化滑動的距離為0;

(2)  touch move時改變content的offset,使之隨手指移動;

(3)  touch end時計算手指的滑動距離,並以此距離作為起始速度,啟動schedule開始做減速運動;

(4)  schedule在速度降為SCROLL_DEACCEL_DIST以下時停止運動;

由上可知,CCScrollView並沒有直接計算content的位移量,而是根據起始速度做減速運動,而如果要讓CCScrollView支援分頁,輸入必須是頁的寬度,每次位移為一個頁寬度,所以需要提前計算content的位移量。

       由速度可以計算出位移量,由位移量可以計算出速度,讓我們為CCScrollView添加兩個函數。

//通過距離計算速度virtual cocos2d::CCPoint calculateSpeed(cocos2d::CCSize distance);//通過速度計算距離virtual cocos2d::CCSize calculateDistance(cocos2d::CCPoint speed);

       有了這兩個函數(事實上我們只需要一個),我們就可以輕鬆的實現分頁了,哦,忘了還有個比較重大的事情,CCScrollView的回調需要大改!

class CCGUIScrollViewDelegate{public:    virtual ~CCGUIScrollViewDelegate() {}//CCMove動作停止virtual void scrollViewDidAnimateStop(CCGUIScrollView* view) {};//滾動結束virtual void scrollViewDidScrollStop(CCGUIScrollView* view) {};//CCMove動作開始virtual void scrollViewDidAnimateStart(CCGUIScrollView* view) {};//滾動開始virtual void scrollViewDidScrollStart(CCGUIScrollView* view) {};//重設virtual void scrollViewDidReset(CCGUIScrollView* view) {};//滾動中virtual void scrollViewDidScroll(CCGUIScrollView* view) {};//縮放操作virtual void scrollViewDidZoom(CCGUIScrollView* view) {};//是否移動了給定的一個位移值virtual void scrollViewDidMoveSegment(CCGUIScrollView* view, bool up) {};};

如上,重點添加了滾動開始結束回調和Animate的開始結束回調,在滾動開始時計算速度,然後覆蓋之前手指產生的速度,這樣不管手指怎麼滑動,最多也就滑動一頁,這裡不詳細描述演算法過程,具體實現還是需要注意很多細節的呵。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.