游戏项目中对CCTableView的使用

游戏项目中对CCTableView的使用

首先引入TableView:

[cpp]
  1. #include "cocos-ext.h"  
  2.   
  3. USING_NS_CC_EXT;  
  4.   
  5. class MyTableLayer : public CCLayer ,  
  6.                                 public CCTableViewDataSource, public CCTableViewDelegate{  
  7.   
  8. };  

需要实现的方法:

[cpp]
  1. virtual void scrollViewDidScroll(CCScrollView* in_pView);//需要继承,但是可以不实现内容  
  2.       
  3. virtual void scrollViewDidZoom(CCScrollView* in_pView);<span style="font-family: Arial, Helvetica, sans-serif;">//需要继承,但是可以不实现内容</span>  
  4.       
  5. //处理触摸事件,可以计算点击的是哪一个子项  
  6. virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);  
  7.       
  8. //每一项的宽度和高度  
  9. virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);  
  10.       
  11. //生成列表每一项的内容  
  12. virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);  
  13.       
  14. //一共多少项  
  15. virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);  
  16.       
  17. //按下去的时候,就是高亮显示,这里可以设置高亮状态  
  18. virtual void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);  
  19.                                       
  20. //松开的时候,取消高亮状态  
  21. virtual void tableCellUnhighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);  

TableView的属性设置:

[cpp]
  1. m_pTableView = CCTableView::create(this, CCSizeMake(***, ***));//设置TableView的大小  
  2. m_pTableView->setDirection(kCCScrollViewDirectionHorizontal);//这里根据项目需要选中了横向设置  
  3. m_pTableView->setAnchorPoint(CCPointZero);  
  4. m_pTableView->setPosition(ccp(***, ***));  
  5. m_pTableView->setDelegate(this);  
  6. m_pTableView->setVerticalFillOrder(kCCTableViewFillTopDown);//数据加载的方式选择了自上至下  
  7. this->addChild(m_pTableView);  
  8. m_pTableView->reloadData();  

TableView的数据加载:

[cpp]
  1. CCTableViewCell* HurtSoldierItemLayer::tableCellAtIndex(CCTableView *table, unsigned int idx)  
  2. {  
  3.     CCTableViewCell *t_pCell = table->dequeueCell();  
  4.     if (!t_pCell) {  
  5.         t_pCell = new CCTableViewCell();  
  6.         t_pCell->autorelease();  
  7.           
  8.     }else{  
  9.         t_pCell->removeAllChildren();//这个地方的RemoveAllChildren很重要,一定要记得remove,不认就会导致列表下标和显示重复混乱  
  10.            
  11.     }  
  12.       
  13.     CCSprite* tmp_pSpSoldierCell = CCSprite::create("BG5.png");  
  14.     t_pCell->addChild(tmp_pSpSoldierCell);  
  15.       
  16.     return t_pCell;  
  17. }  

高亮与取消高亮可以根据自己的项目需求来实现,他的默认实现方式是当点击列表中的图标就执行tableCellHighlight,松开点击后马上执行tableCellUnhighlight,原理就就像菜单按钮一样,按下去是一个状态,松开又恢复原来的状态。


OK,其中最值得注意的地方是tableCellAtIndex方法中加载cell是时候一定要记得remove已存在下标的Cell,不然加载会出现覆盖导致顺利混乱有误,网上有个博客针对这个问题给出了一个杀鸡取卵的解决方案,就是去CCTableView::dequeueCell()方法中将if (m_pCellsFreed->count() == 0)修改成if(1),注意会导致每次dequeueCell都会new出新的Cell,加载数量一多,必定挂掉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值