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)

你可能感兴趣的:(cocos2d-x)