生活随笔
收集整理的這篇文章主要介紹了
【玩转cocos2d-x之十五】关卡选择的设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/12966993
這節介紹一下游戲中幫助界面和關卡選擇的設計,其實都是一樣的,關鍵在于美工。這里采用自定義TableView層來實現。
1.導入頭文件和設定空間
因為TableView相關的類是在擴展包里面,所以必須先聲明
[cpp]?view plaincopy
#include?"cocos-ext.h"?? USING_NS_CC_EXT;??
2.繼承的實現
自定義TableView繼承于CCLayer,因此可以捕獲觸摸,同時繼承于擴展包的CCTableViewDataSource和CCTableViewDelegate。前者是TableView的數據源,包含了一系列和TableView數據單元相關的操作,后者則是繼承于CCScrollViewDelegate抽象類,聲明了一些和滾動,放大,觸摸回調之類的接口,然后在內部包含了一個CCTableView,這用起來有點像Android的Adapter。當然分別繼承幾個類使用也是一樣的。
先看一下要實現的接口吧。
[cpp]?view plaincopy
class?TableViewTestLayer?:?public?cocos2d::CCLayer,?public?cocos2d::extension::CCTableViewDataSource,?public?cocos2d::extension::CCTableViewDelegate?? {?? public:?? ????virtual?bool?init();???? ?? ????CREATE_FUNC(TableViewTestLayer);?? ?????? ????virtual?void?scrollViewDidScroll(cocos2d::extension::CCScrollView*?view){}?? ????virtual?void?scrollViewDidZoom(cocos2d::extension::CCScrollView*?view){}?? ????virtual?void?tableCellTouched(cocos2d::extension::CCTableView*?table,?cocos2d::extension::CCTableViewCell*?cell);?? ????virtual?cocos2d::CCSize?tableCellSizeForIndex(cocos2d::extension::CCTableView?*table,?unsigned?int?idx);?? ????virtual?cocos2d::extension::CCTableViewCell*?tableCellAtIndex(cocos2d::extension::CCTableView?*table,?unsigned?int?idx);?? ????virtual?unsigned?int?numberOfCellsInTableView(cocos2d::extension::CCTableView?*table);?? };??
當然還有一些其他功能,如高亮,循環,看情況重載。
3.自定義TabView層各模塊的實現
3.1.初始化函數init
[cpp]?view plaincopy
CCSize?winSize?=?CCDirector::sharedDirector()->getWinSize();?? ???CCTableView*?tableView?=?CCTableView::create(this,?winSize);?? ???tableView->setDirection(kCCScrollViewDirectionHorizontal);?? ???tableView->setPosition(ccp(0,winSize.height/2-50));?? ???tableView->setDelegate(this);?? ???this->addChild(tableView);?? ???tableView->reloadData();??
3.2.觸摸回調tableCellTouched
[cpp]?view plaincopy
void?TableViewTestLayer::tableCellTouched(CCTableView*?table,?CCTableViewCell*?cell)?? {?? ????CCLOG("cell?touched?at?index:?%i",?cell->getIdx());?? }??
3.3.單元大小tableCellSizeForIndex
[cpp]?view plaincopy
CCSize?TableViewTestLayer::tableCellSizeForIndex(CCTableView?*table,?unsigned?int?idx)?? {?? ?????? ?????? ?????? ????return?CCSizeMake(120,?120);其余為120,120?? }??
3.4.設置數據源tableCellAtIndex
[cpp]?view plaincopy
CCTableViewCell*?TableViewTestLayer::tableCellAtIndex(CCTableView?*table,?unsigned?int?idx)?? {?? ????CCString?*string?=?CCString::createWithFormat("%d",?idx);?? ????CCTableViewCell?*cell?=?table->dequeueCell();?? ????if?(!cell)?{?? ????????cell?=?new?CCTableViewCell();?? ????????cell->autorelease();?? ????????CCSprite?*sprite?=?CCSprite::create("HelloWorld.png");?? ????????sprite->setScale(0.2f);?? ????????sprite->setPosition(ccp(60,?60));?? ????????sprite->setTag(123);?? ????????cell->addChild(sprite);?? ????????CCLabelTTF?*label?=?CCLabelTTF::create(string->getCString(),?"Helvetica",?20.0);?? ????????label->setPosition(ccp(60,10));?? ????????label->setTag(456);?? ????????cell->addChild(label);?? ????}?? ????else?? ????{?? ????????CCLabelTTF?*label?=?(CCLabelTTF*)cell->getChildByTag(456);?? ????????label->setString(string->getCString());?? ????}?? ????return?cell;?? }??
3.5.單元數numberOfCellsInTableView
[cpp]?view plaincopy
unsigned?int?TableViewTestLayer::numberOfCellsInTableView(CCTableView?*table)?? {?? ????return?20;?? }??
4.效果圖
? ? ?? ? ?
5.源碼下載地址
http://download.csdn.net/detail/jackyvincefu/6422401
總結
以上是生活随笔為你收集整理的【玩转cocos2d-x之十五】关卡选择的设计的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。