生活随笔
收集整理的这篇文章主要介绍了
【玩转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之十五】关卡选择的设计的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。