【玩转cocos2d-x之十五】关卡选择的设计

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12966993


这节介绍一下游戏中帮助界面和关卡选择的设计,其实都是一样的,关键在于美工。这里采用自定义TableView层来实现。


1.导入头文件和设定空间

因为TableView相关的类是在扩展包里面,所以必须先声明

  1. #include"cocos-ext.h"
  2. USING_NS_CC_EXT;

2.继承的实现

自定义TableView继承于CCLayer,因此可以捕获触摸,同时继承于扩展包的CCTableViewDataSource和CCTableViewDelegate。前者是TableView的数据源,包含了一系列和TableView数据单元相关的操作,后者则是继承于CCScrollViewDelegate抽象类,声明了一些和滚动,放大,触摸回调之类的接口,然后在内部包含了一个CCTableView,这用起来有点像Android的Adapter。当然分别继承几个类使用也是一样的。

先看一下要实现的接口吧。

  1. classTableViewTestLayer:publiccocos2d::CCLayer,publiccocos2d::extension::CCTableViewDataSource,publiccocos2d::extension::CCTableViewDelegate
  2. {
  3. public:
  4. virtualboolinit();
  5. CREATE_FUNC(TableViewTestLayer);
  6. virtualvoidscrollViewDidScroll(cocos2d::extension::CCScrollView*view){}//滚动时调用,空实现,因为继承了抽象类所以必须重写
  7. virtualvoidscrollViewDidZoom(cocos2d::extension::CCScrollView*view){}//缩放时调用,空实现,同上
  8. virtualvoidtableCellTouched(cocos2d::extension::CCTableView*table,cocos2d::extension::CCTableViewCell*cell);//触摸单元时回调
  9. virtualcocos2d::CCSizetableCellSizeForIndex(cocos2d::extension::CCTableView*table,unsignedintidx);//设定单元所占大小
  10. virtualcocos2d::extension::CCTableViewCell*tableCellAtIndex(cocos2d::extension::CCTableView*table,unsignedintidx);//设定单元内容
  11. virtualunsignedintnumberOfCellsInTableView(cocos2d::extension::CCTableView*table);//返回单元数
  12. };
当然还有一些其他功能,如高亮,循环,看情况重载。


3.自定义TabView层各模块的实现


3.1.初始化函数init

  1. CCSizewinSize=CCDirector::sharedDirector()->getWinSize();
  2. CCTableView*tableView=CCTableView::create(this,winSize);//创建一个CCTableView
  3. tableView->setDirection(kCCScrollViewDirectionHorizontal);//设置方向
  4. tableView->setPosition(ccp(0,winSize.height/2-50));
  5. tableView->setDelegate(this);//这句话很重要,把taleView和当前类绑到一起,所以后面的调用主体都是tableView
  6. this->addChild(tableView);
  7. tableView->reloadData();


3.2.触摸回调tableCellTouched

  1. voidTableViewTestLayer::tableCellTouched(CCTableView*table,CCTableViewCell*cell)
  2. {
  3. CCLOG("celltouchedatindex:%i",cell->getIdx());//cell为当前选择单元
  4. }


3.3.单元大小tableCellSizeForIndex

  1. CCSizeTableViewTestLayer::tableCellSizeForIndex(CCTableView*table,unsignedintidx)
  2. {
  3. //if(idx==2){
  4. //returnCCSizeMake(100,100);//第2个大小为100,100
  5. //}
  6. returnCCSizeMake(120,120);其余为120,120
  7. }

3.4.设置数据源tableCellAtIndex

  1. CCTableViewCell*TableViewTestLayer::tableCellAtIndex(CCTableView*table,unsignedintidx)
  2. {
  3. CCString*string=CCString::createWithFormat("%d",idx);
  4. CCTableViewCell*cell=table->dequeueCell();
  5. if(!cell){
  6. cell=newCCTableViewCell();//创建单元,如果要自定义单元效果,需继承CCTableViewCell,并重载draw函数
  7. cell->autorelease();
  8. CCSprite*sprite=CCSprite::create("HelloWorld.png");
  9. sprite->setScale(0.2f);
  10. sprite->setPosition(ccp(60,60));
  11. sprite->setTag(123);
  12. cell->addChild(sprite);//添加到cell
  13. CCLabelTTF*label=CCLabelTTF::create(string->getCString(),"Helvetica",20.0);
  14. label->setPosition(ccp(60,10));
  15. label->setTag(456);
  16. cell->addChild(label);//添加到cell
  17. }
  18. else
  19. {
  20. CCLabelTTF*label=(CCLabelTTF*)cell->getChildByTag(456);
  21. label->setString(string->getCString());
  22. }
  23. returncell;
  24. }


3.5.单元数numberOfCellsInTableView

  1. unsignedintTableViewTestLayer::numberOfCellsInTableView(CCTableView*table)
  2. {
  3. return20;//直接返回设定单元数
  4. }


4.效果图



5.源码下载地址

http://download.csdn.net/detail/jackyvincefu/6422401

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cocos creator实现的推箱子游戏,含源码和功能;游戏一共有100关卡。 cc.Class({ extends: cc.Component, properties: { // foo: { // // ATTRIBUTES: // default: null, // The default value will be used only when the component attaching // // to a node for the first time // type: cc.SpriteFrame, // optional, default is typeof default // serializable: true, // optional, default is true // }, // bar: { // get () { // return this._bar; // }, // set (value) { // this._bar = value; // } // }, starImg : cc.Node, itemBg : cc.Node, levelTxt : cc.Node, }, // LIFE-CYCLE CALLBACKS: onLoad () { }, start () { }, //--------显示星星数量-------- /** * @description: 显示星星数量 * @param {boolean} isOpen 是否开启 * @param {starCount} 星星数量 * @param {cc.SpriteAtlas} levelImgAtlas 纹理图 * @param {number} level 关卡 * @return: */ showStar : function(isOpen, starCount, levelImgAtlas, level){ this.itemBg.attr({"_level_" : level}); if(isOpen){ this.itemBg.getComponent(cc.Sprite).spriteFrame = levelImgAtlas.getSpriteFrame("pass_bg"); this.starImg.active = true; this.starImg.getComponent(cc.Sprite).spriteFrame = levelImgAtlas.getSpriteFrame("point" + starCount); this.levelTxt.opacity = 255; this.itemBg.getComponent(cc.Button).interactable = true; }else{ this.itemBg.getComponent(cc.Sprite).spriteFrame = levelImgAtlas.getSpriteFrame("lock"); this.starImg.active = false; this.levelTxt.opacity = 125; this.itemBg.getComponent(cc.Button).interactable = false; } this.levelTxt.getComponent(cc.Label).string = level; }, /

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值