• Cocos2d-X 使用CCTableView创建滚动视图


    CCTableView和CCScrollView如创建滚动视图,CCTableView该函数将是更,制造更多麻烦


    实例1:使用CCTableView创建滚动视图

    首先创建一个TableView类

    TableView.h中的代码

    #ifndef __TableView_H__
    #define __TableView_H__
    
    #include "cocos2d.h"
    #include "cocos-ext.h"
    USING_NS_CC;
    USING_NS_CC_EXT;
    
    class TableView : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate 
    {
    public:
        virtual bool init();  
    
        static CCScene* scene();
        
        CREATE_FUNC(TableView);
    
        //创建一个数组
        CCArray* _arr;
    
        //返回格子的大小
        virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx) 
        {
            return cellSizeForTable(table);
        };
    
        //每一个格子的大小
        virtual CCSize cellSizeForTable(CCTableView *table) 
        {
            //返回窗体的大小
            return CCDirector::sharedDirector()->getWinSize();
        }
       
        //返回格子的编号
        virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx)
        {
            return (CCTableViewCell*)_arr->objectAtIndex(idx);
        }
    
        //返回滚动的大小(格子的个数)
        virtual unsigned int numberOfCellsInTableView(CCTableView *table)
        {
            return _arr->count();
        }
        
        virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell)
        {
            CCLog("clicked cell is %d", cell->getIdx());
        }
        
        virtual void scrollViewDidScroll(CCScrollView* view){};
        virtual void scrollViewDidZoom(CCScrollView* view){};
    };
    
    #endif // __TableView_H__
    


    TableView.cpp中的代码

    #include "TableView.h"
    
    CCScene* TableView::scene()
    {
        CCScene *scene = CCScene::create();
        
        TableView *layer = TableView::create();
    
        scene->addChild(layer);
    
        return scene;
    }
    
    bool TableView::init()
    {
        CCLayer::init();
    
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
        CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
    
        //先创建好CCTableViewCell
        
        //创建一个数组
        _arr = CCArray::create();
    
        _arr->retain();
    
        for(int i = 0; i < 5; i++)
        {
            CCTableViewCell* cell = new CCTableViewCell();
            cell->autorelease();
            _arr->addObject(cell);
    
            CCSprite* sprite = CCSprite::create("HelloWorld.png");
            cell->addChild(sprite);
            sprite->setPosition(center);
        }
    
        //创建TableView
        CCTableView* tableView =  CCTableView::create(this, winSize);
        addChild(tableView);
    
        //设置TableView的滚动方向
        //kCCScrollViewDirectionHorizonta表示在水平方向上滚动
        tableView->setDirection(kCCScrollViewDirectionHorizontal);
    
        //载入数据
        tableView->reloadData();
    
        tableView->setDelegate(this);
    
        return true;
    }
    

    运行结果:



    实例2:使用CCTableView创建一个小窗体的滚动视图(该功能经常使用于游戏中的选择道具)

    首先创建一个TableViewSmall类

    TableViewSmall.h中的代码

    #ifndef __TableViewSmall_H__
    #define __TableViewSmall_H__
    
    #include "cocos2d.h"
    #include "cocos-ext.h"
    USING_NS_CC;
    USING_NS_CC_EXT;
    
    class TableViewSmall : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate 
    {
    public:
        virtual bool init();  
    
        static CCScene* scene();
        
        CREATE_FUNC(TableViewSmall);
    
        //创建一个数组
        CCArray* _arr;
    
        //返回格子的大小
        virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx) 
        {
            if(1 == idx)
            {
                return CCSizeMake(60, 40);
            }
    
            return cellSizeForTable(table);
        };
    
        //每一个格子的大小
        virtual CCSize cellSizeForTable(CCTableView *table) 
        {
            //每一个格子的大小
            return CCSizeMake(40, 40);
        }
       
        //返回格子的编号
        virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx)
        {
            return (CCTableViewCell*)_arr->objectAtIndex(idx);
        }
    
        //返回滚动的大小(格子的个数)
        virtual unsigned int numberOfCellsInTableView(CCTableView *table)
        {
            return _arr->count();
        }
        
        virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell)
        {
            CCLog("clicked cell is %d", cell->getIdx());
        }
        
        virtual void scrollViewDidScroll(CCScrollView* view){};
        virtual void scrollViewDidZoom(CCScrollView* view){};
    };
    
    #endif // __TableViewSmall_H__
    

    TableViewSmall.cpp中的代码

    #include "TableViewSmall.h"
    
    CCScene* TableViewSmall::scene()
    {
        CCScene *scene = CCScene::create();
        
        TableViewSmall *layer = TableViewSmall::create();
    
        scene->addChild(layer);
    
        return scene;
    }
    
    bool TableViewSmall::init()
    {
        CCLayer::init();
    
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
        CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
    
        //先创建好CCTableViewCell
        
        //创建一个数组
        _arr = CCArray::create();
    
        _arr->retain();
    
        for(int i = 0; i < 5; i++)
        {
            CCTableViewCell* cell = new CCTableViewCell();
            cell->autorelease();
            _arr->addObject(cell);
    
            CCSprite* sprite = CCSprite::create("CloseNormal.png");
            cell->addChild(sprite);
            sprite->setPosition(ccp(20, 20));
        }
    
        //创建TableView
        CCTableView* tableView =  CCTableView::create(this, CCSizeMake(40 * 3, 40));
        addChild(tableView);
    
        //设置TableView的滚动方向
        //kCCScrollViewDirectionHorizonta表示在水平方向上滚动
        tableView->setDirection(kCCScrollViewDirectionHorizontal);
    
        //载入数据
        tableView->reloadData();
    
        tableView->setDelegate(this);
    
        tableView->setPosition(center);
    
        return true;
    }
    
    

    运行结果:

    

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    用汇编的眼光看c++(之模板函数) 四
    从B树、B+树、B*树谈到R 树 四
    how to locate dll in native c++ world / dotnet world?
    GAC和sidebyside
    ARM VS Intel
    关于dotnet下的encoding
    synchronization objects for interprocess synchronization and multithreadiing
    [remote debug]WinDBG 技巧: 如何用WinDBG远程调试程序
    [tip]transparent bmp
    Review: functor / function object
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4755119.html
Copyright © 2020-2023  润新知