轉自: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)
