Cocos2dx 学习之CCTableView

   上次大体总结了一下CCScrollView,一直想再总结一下CCTableView,但是一直懒得的动弹,今晚要和同事调试代码,趁同事改bug的时间,把它简单的总结一下吧。

  CCTableView在游戏中一般用在背包这样场景或层中,当然也不止这些,在ios开发中UITableView的应用是相当的广泛,当然它们的用途是一样的。(其实你会发现CCtableView其实就是参照UITableView来写的,所以做过ios开发的同学happy了)。

  既然说到了用到背包的地方,那么我们就做一个简单的背包信息的例子来学习它吧。

  先上代码再说 .h文件

//

//  CCTableViewLayer.h

//  Cocos2dXLearnDemo

//

//  Created by  昌兴 on 12-12-31.

//

//

 

#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

//

//  Created by  昌兴 on 12-12-31.

//

//

 

#include "CCTableViewLayer.h"

#include "TestSprite.h"

boolCCTableViewLayer::init(){

    

    if(!CCLayer::init()){

        returnfalse;

    }

    

//   第一个参数是dataSource

    CCTableView *tableView=CCTableView::create(thisCCSizeMake(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);

}

 CCTableViewCellCCTableViewLayer::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是一样的。当然我们这里要继承

publicCCTableViewDataSource,publicCCTableViewDelegate。

几个方法和UITableView的都差不多。

//CCTableViewDataSource

CCSizeCCTableViewLayer::cellSizeForTable(CCTableView *table)  

unsigned int CCTableViewLayer::numberOfCellsInTableView(CCTableView *table)

CCTableViewCellCCTableViewLayer::tableCellAtIndex(CCTableView *table, unsignedint idx)

//CCTableViewDelegate

void CCTableViewLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell)

 

当然这样子。我们的背包的大体样子就出来。但是它这是展示一下物品还没有其他功能。因为大多数背包都是支持双击和长按的。这个我们后面再慢慢实现吧。

posted @ 2013-01-16 10:31  丁昌兴  阅读(6741)  评论(8编辑  收藏  举报