在游戏中,经常需要用到列表展示,例如我现在做的卡牌游戏中就有卡牌列表和好友列表需要用到CCTableView,下面简单介绍一下使用方法。
CCTableView位于扩展库文件cocos-ext.h中,它是CCScrollView的子类。引擎已经帮我们封装好了,而我们要实现列表展示只需要重写下面4个函数:
// 处理触摸事件,可以计算点击的是哪个子项 virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell); // 定制单元格cell的尺寸 virtual CCSize cellSizeForTable(CCTableView *table); // 生成列表的每一项内容 virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx); // cell的数量 virtual unsigned int numberOfCellsInTableView(CCTableView *table);
由于CCTableView继承自CCScrollView,所以要实现这两个方法,但是什么都不做。
virtual void scrollViewDidScroll(CCScrollView* view); virtual void scrollViewDidZoom(CCScrollView* view);
下面我们来写一个好友列表展示:
FriendListLayer.h
#ifndef __FRIENDLISTLAYER_H__
#define __FRIENDLISTLAYER_H__
#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
class FriendListLayer : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate
{
public:
virtual bool init();
// CCTableViewDelegate继承自CCScrollViewDelegate
virtual void scrollViewDidScroll(CCScrollView* view);
virtual void scrollViewDidZoom(CCScrollView* view);
// 处理触摸事件,可以计算点击的是哪个子项
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);
// 定制单元格的尺寸
virtual CCSize cellSizeForTable(CCTableView *table);
// 生成列表的每一项内容
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
// cell的数量
virtual unsigned int numberOfCellsInTableView(CCTableView *table);
// 返回按钮回调函数
void menuCallback(CCObject* pSender);
CREATE_FUNC(FriendListLayer);
};
#endif
FriendListLayer.cpp
另外还可以重写这两个函数实现cell的点击和释放时的响应效果:
// 按下 void FriendListLayer::tableCellHighlight(CCTableView *table, CCTableViewCell *cell) { CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("cell_selected.png"); CCSprite *pSprite=(CCSprite *)cell->getChildByTag(12); pSprite->setTexture(aTexture); } // 释放 void FriendListLayer::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell) { CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("cell_background.png"); CCSprite *pSprite=(CCSprite *)cell->getChildByTag(12); pSprite->setTexture(aTexture); }效果图: