转自:http://www.cnblogs.com/dcxing/archive/2013/01/16/2862068.html
CCTableView在游戏中一般用在背包这样场景或层中,当然也不止这些,在ios开发中UITableView的应用是相当的广泛,当然它们的用途是一样的。(其实你会发现CCtableView其实就是参照UITableView来写的,所以做过ios开发的同学happy了)。
既然说到了用到背包的地方,那么我们就做一个简单的背包信息的例子来学习它吧。
先上代码再说 .h文件
// // CCTableViewLayer.h // Cocos2dXLearnDemo // // #ifndef __Cocos2dXLearnDemo__CCTableViewLayer__ #define __Cocos2dXLearnDemo__CCTableViewLayer__ #include <iostream> #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; class CCTableViewLayer:publicCCLayer,publicCCTableViewDataSource,publicCCTableViewDelegate{ public: // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer) virtual bool init(); // preprocessor macro for "static create()" constructor ( node() deprecated ) CREATE_FUNC(CCTableViewLayer); // DataSource /** * cell height for a given table. * * @param table table to hold the instances of Class * @return cell size */ virtual CCSize cellSizeForTable(CCTableView *table); /** * a cell instance at a given index * * @param idx index to search for a cell * @return cell found at idx */ virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx); /** * Returns number of cells in a given table view. * * @return number of cells */ virtual unsigned int numberOfCellsInTableView(CCTableView *table); //delegate virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell); // 另外还要引入CCScrollViewDelegate的虚函数,原因是CCTableView继承自CCScrollView virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view); virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view); }; #endif /* defined(__Cocos2dXLearnDemo__CCTableViewLayer__) */ .m文件 // // CCTableViewLayer.cpp // Cocos2dXLearnDemo // // #include "CCTableViewLayer.h" #include "TestSprite.h" boolCCTableViewLayer::init(){ if(!CCLayer::init()){ returnfalse; } // 第一个参数是dataSource CCTableView *tableView=CCTableView::create(this, CCSizeMake(480, 240)); tableView->setPosition(ccp(0, 0)); // 设置方向 tableView->setDirection(kCCScrollViewDirectionVertical); tableView->setAnchorPoint(CCPointZero); // tableView->setAnchorPoint(ccp(0.5, 0.5)); tableView->setPosition(ccp(0,50)); tableView->setDelegate(this); CCLOG("AnchPoint=%f,%f",tableView->getAnchorPoint().x,tableView->getAnchorPoint().y); // 设置顺序是自上往下 tableView->setVerticalFillOrder(kCCTableViewFillTopDown); // CCLOG("tableView->getPosition()=%f,%f",tableView->getPosition().x,tableView->getPosition().y); this->addChild(tableView); // CCLOG("AfterAnchPoint=%f,%f",tableView->getAnchorPoint().x,tableView->getAnchorPoint().y); tableView->reloadData(); this->setTouchEnabled(true); returntrue; } //datasource CCSizeCCTableViewLayer::cellSizeForTable(CCTableView *table){ return CCSizeMake(table->getContentSize().width, 100); } CCTableViewCell* CCTableViewLayer::tableCellAtIndex(CCTableView *table, unsignedint idx){ CCTableViewCell *cell = table->dequeueCell(); if(!cell){ cell = new CCTableViewCell(); cell->autorelease(); } cell->removeAllChildrenWithCleanup(true); for (int i=0; i<3; i++) { CCSprite *testSprite=CCSprite::create("Icon.png"); testSprite->setPosition(ccp(240+100*i, 30)); cell->addChild(testSprite); } return cell; } unsigned int CCTableViewLayer::numberOfCellsInTableView(CCTableView *table){ return 20; } //delegate voidCCTableViewLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell){ // CCLog("HHHHHHHH"); } void CCTableViewLayer::scrollViewDidScroll(CCScrollView* view){ // CCLOG("scrollViewDidScroll"); } //设置Zoom的时候进行调用 void CCTableViewLayer::scrollViewDidZoom(CCScrollView* view){ // CCLOG("scrollViewDidZoom"); }
首先CCTableView继承自CCScrollView,自然它是在 Cocosd-x 的扩展库里面.
所以你会发现要引入下面两个虚函数。
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view) {} virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}
另外它的用法基本和UITableView是一样的。当然我们这里要继承
public CCTableViewDataSource,public CCTableViewDelegate
几个方法和UITableView的都差不多。
//CCTableViewDataSource CCSizeCCTableViewLayer::cellSizeForTable(CCTableView *table) unsigned int CCTableViewLayer::numberOfCellsInTableView(CCTableView *table) CCTableViewCell* CCTableViewLayer::tableCellAtIndex(CCTableView *table, unsignedint idx)
//CCTableViewDelegate void CCTableViewLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell)