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)

 

當然這樣子。我們的背包的大體樣子就出來。但是它這是展示一下物品還沒有其他功能。因為大多數背包都是支持雙擊和長按的。這個我們后面再慢慢實現吧。


免責聲明!

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



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