zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/3214534.html
Copyright © 2011-2022 走看看