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)
  • 相关阅读:
    集合的一些操作总结
    字符串的操作
    python字典的操作总结
    python中的列表知识总结
    Python利用文件操作实现用户名的存储登入操作
    如何理解:城市的“信息化→智能化→智慧化”
    程序员必备技能-怎样快速接手一个项目
    程序员的职业规划
    只要 8 个步骤,学会这个 Docker 命令终极教程!
    使用GitLab实现CI/CD
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/3214534.html
Copyright © 2011-2022 走看看