智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

cocos2d-x CCTableView

Posted on 2013-07-25 15:56  Bill Yuan  阅读(4248)  评论(0编辑  收藏  举报

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