cocos2d-x CCTableView


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM