【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜
投稿于 被查看 4772 次 评论:15
【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜
接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView 。
大数据的虚拟化展示, 不管在应用还是游戏里都是很常见的控件。 比如下面的 《天天爱消除》 的分数展示
我们选用一个Layer,
ListViewLayer : cocos2d::CCLayer, cocos2d::extension::CCTableViewDataSource, cocos2d::extension::CCTableViewDelegate{
:
init();
scrollViewDidScroll(cocos2d::extension::CCScrollView* view);
scrollViewDidZoom(cocos2d::extension::CCScrollView* view);
tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);
cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);
cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned idx);
unsigned numberOfCellsInTableView(cocos2d::extension::CCTableView *table);
CREATE_FUNC(ListViewLayer);
};
该 Layer 实现了
分别为 CCTableView 提供数据源 和 响应事件,后面会作为 CCTableView 的 Delegate 存在
ListViewLayer::init()
{
bRet = ;
{
CC_BREAK_IF( !CCLayer::init() );
bg = CCTextureCache::sharedTextureCache()->addImage();
bg2 = CCTextureCache::sharedTextureCache()->addImage();
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCTableView* pTableView = CCTableView::create(, CCSizeMake(visibleSize.width, visibleSize.height));
pTableView->setDirection(kCCScrollViewDirectionVertical);
pTableView->setPosition(CCPointZero);
pTableView->setDelegate(); //将Delegate对象设置为刚才创建的容器.
pTableView->setVerticalFillOrder(kCCTableViewFillTopDown);
->addChild(pTableView);
pTableView->reloadData();
bRet = ;
}
();
bRet;
}
首先要 通过
代码如下:
unsigned ListViewLayer::numberOfCellsInTableView(CCTableView *table){
;
}
CCSize ListViewLayer::cellSizeForTable(CCTableView *table)
{
CCSizeMake(CCDirector::sharedDirector()->getVisibleSize().width, );
}
CCTableViewCell* ListViewLayer::tableCellAtIndex(CCTableView *table, unsigned idx)
{
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCString *pString = CCString::createWithFormat(, idx + );
//这里要注意,因为是单元格是会重用的,所以不一定每次都要新建。
CCTableViewCell *pCell = table->dequeueCell();
(!pCell)
{
pCell = CCTableViewCell();
pCell->autorelease();
CCSprite *pSprite;
(UserIndex == idx)
{
pSprite = CCSprite::createWithTexture(bg2);
}
{
pSprite = CCSprite::createWithTexture(bg);
}
pSprite->setAnchorPoint(CCPointZero);
pSprite->setPosition(CCPointZero);
pSprite->setTag();
pCell->addChild(pSprite);
pSprite = CCSprite::create();
pSprite->setPosition(ccp(, ));
pCell->addChild(pSprite);
CCLabelTTF *pLabel = CCLabelTTF::create(pString->getCString(), , );
pLabel->setPosition(ccp(, ));
pLabel->setTag();
pCell->addChild(pLabel);
pLabel = CCLabelTTF::create(, , );
pLabel->setPosition(ccp(, ));
pLabel->setAnchorPoint(CCPointZero);
pLabel->setTag();
pCell->addChild(pLabel);
}
{
CCLabelTTF *pLabel = (CCLabelTTF*)pCell->getChildByTag();
pLabel->setString(pString->getCString());
(UserIndex == idx)//根据ID创建不同的效果.
{
CCSprite* bg3 = (CCSprite*)pCell->getChildByTag();
bg3->setTexture(bg2);
}
{
CCSprite* bg3 = (CCSprite*)pCell->getChildByTag();
bg3->setTexture(bg);
}
}
pCell;
就这三步,大功告成了,附上效果图:
用户评论