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

来源:互联网 发布:spas软件 编辑:程序博客网 时间:2024/05/17 09:21

From: http://blog.csdn.net/u010105970/article/details/40352619

CCTableView和CCScrollView一样用于创建滚动视图,CCTableView的功能也比较多,创建比较麻烦


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

首先创建一个TableView类

TableView.h中的代码

[cpp] view plaincopy
  1. #ifndef __TableView_H__  
  2. #define __TableView_H__  
  3.   
  4. #include "cocos2d.h"  
  5. #include "cocos-ext.h"  
  6. USING_NS_CC;  
  7. USING_NS_CC_EXT;  
  8.   
  9. class TableView : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate   
  10. {  
  11. public:  
  12.     virtual bool init();    
  13.   
  14.     static CCScene* scene();  
  15.       
  16.     CREATE_FUNC(TableView);  
  17.   
  18.     //创建一个数组  
  19.     CCArray* _arr;  
  20.   
  21.     //返回格子的大小  
  22.     virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx)   
  23.     {  
  24.         return cellSizeForTable(table);  
  25.     };  
  26.   
  27.     //每个格子的大小  
  28.     virtual CCSize cellSizeForTable(CCTableView *table)   
  29.     {  
  30.         //返回窗口的大小  
  31.         return CCDirector::sharedDirector()->getWinSize();  
  32.     }  
  33.      
  34.     //返回格子的编号  
  35.     virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx)  
  36.     {  
  37.         return (CCTableViewCell*)_arr->objectAtIndex(idx);  
  38.     }  
  39.   
  40.     //返回滚动的大小(格子的个数)  
  41.     virtual unsigned int numberOfCellsInTableView(CCTableView *table)  
  42.     {  
  43.         return _arr->count();  
  44.     }  
  45.       
  46.     virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell)  
  47.     {  
  48.         CCLog("clicked cell is %d", cell->getIdx());  
  49.     }  
  50.       
  51.     virtual void scrollViewDidScroll(CCScrollView* view){};  
  52.     virtual void scrollViewDidZoom(CCScrollView* view){};  
  53. };  
  54.   
  55. #endif // __TableView_H__  


TableView.cpp中的代码

[cpp] view plaincopy
  1. #include "TableView.h"  
  2.   
  3. CCScene* TableView::scene()  
  4. {  
  5.     CCScene *scene = CCScene::create();  
  6.       
  7.     TableView *layer = TableView::create();  
  8.   
  9.     scene->addChild(layer);  
  10.   
  11.     return scene;  
  12. }  
  13.   
  14. bool TableView::init()  
  15. {  
  16.     CCLayer::init();  
  17.   
  18.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();  
  19.     CCPoint center = ccp(winSize.width / 2, winSize.height / 2);  
  20.   
  21.     //先创建好CCTableViewCell  
  22.       
  23.     //创建一个数组  
  24.     _arr = CCArray::create();  
  25.   
  26.     _arr->retain();  
  27.   
  28.     for(int i = 0; i < 5; i++)  
  29.     {  
  30.         CCTableViewCell* cell = new CCTableViewCell();  
  31.         cell->autorelease();  
  32.         _arr->addObject(cell);  
  33.   
  34.         CCSprite* sprite = CCSprite::create("HelloWorld.png");  
  35.         cell->addChild(sprite);  
  36.         sprite->setPosition(center);  
  37.     }  
  38.   
  39.     //创建TableView  
  40.     CCTableView* tableView =  CCTableView::create(this, winSize);  
  41.     addChild(tableView);  
  42.   
  43.     //设置TableView的滚动方向  
  44.     //kCCScrollViewDirectionHorizonta表示在水平方向上滚动  
  45.     tableView->setDirection(kCCScrollViewDirectionHorizontal);  
  46.   
  47.     //加载数据  
  48.     tableView->reloadData();  
  49.   
  50.     tableView->setDelegate(this);  
  51.   
  52.     return true;  
  53. }  

执行结果:



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

首先创建一个TableViewSmall类

TableViewSmall.h中的代码

[cpp] view plaincopy
  1. #ifndef __TableViewSmall_H__  
  2. #define __TableViewSmall_H__  
  3.   
  4. #include "cocos2d.h"  
  5. #include "cocos-ext.h"  
  6. USING_NS_CC;  
  7. USING_NS_CC_EXT;  
  8.   
  9. class TableViewSmall : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate   
  10. {  
  11. public:  
  12.     virtual bool init();    
  13.   
  14.     static CCScene* scene();  
  15.       
  16.     CREATE_FUNC(TableViewSmall);  
  17.   
  18.     //创建一个数组  
  19.     CCArray* _arr;  
  20.   
  21.     //返回格子的大小  
  22.     virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx)   
  23.     {  
  24.         if(1 == idx)  
  25.         {  
  26.             return CCSizeMake(60, 40);  
  27.         }  
  28.   
  29.         return cellSizeForTable(table);  
  30.     };  
  31.   
  32.     //每个格子的大小  
  33.     virtual CCSize cellSizeForTable(CCTableView *table)   
  34.     {  
  35.         //每个格子的大小  
  36.         return CCSizeMake(40, 40);  
  37.     }  
  38.      
  39.     //返回格子的编号  
  40.     virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx)  
  41.     {  
  42.         return (CCTableViewCell*)_arr->objectAtIndex(idx);  
  43.     }  
  44.   
  45.     //返回滚动的大小(格子的个数)  
  46.     virtual unsigned int numberOfCellsInTableView(CCTableView *table)  
  47.     {  
  48.         return _arr->count();  
  49.     }  
  50.       
  51.     virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell)  
  52.     {  
  53.         CCLog("clicked cell is %d", cell->getIdx());  
  54.     }  
  55.       
  56.     virtual void scrollViewDidScroll(CCScrollView* view){};  
  57.     virtual void scrollViewDidZoom(CCScrollView* view){};  
  58. };  
  59.   
  60. #endif // __TableViewSmall_H__  

TableViewSmall.cpp中的代码

[cpp] view plaincopy
  1. #include "TableViewSmall.h"  
  2.   
  3. CCScene* TableViewSmall::scene()  
  4. {  
  5.     CCScene *scene = CCScene::create();  
  6.       
  7.     TableViewSmall *layer = TableViewSmall::create();  
  8.   
  9.     scene->addChild(layer);  
  10.   
  11.     return scene;  
  12. }  
  13.   
  14. bool TableViewSmall::init()  
  15. {  
  16.     CCLayer::init();  
  17.   
  18.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();  
  19.     CCPoint center = ccp(winSize.width / 2, winSize.height / 2);  
  20.   
  21.     //先创建好CCTableViewCell  
  22.       
  23.     //创建一个数组  
  24.     _arr = CCArray::create();  
  25.   
  26.     _arr->retain();  
  27.   
  28.     for(int i = 0; i < 5; i++)  
  29.     {  
  30.         CCTableViewCell* cell = new CCTableViewCell();  
  31.         cell->autorelease();  
  32.         _arr->addObject(cell);  
  33.   
  34.         CCSprite* sprite = CCSprite::create("CloseNormal.png");  
  35.         cell->addChild(sprite);  
  36.         sprite->setPosition(ccp(20, 20));  
  37.     }  
  38.   
  39.     //创建TableView  
  40.     CCTableView* tableView =  CCTableView::create(this, CCSizeMake(40 * 3, 40));  
  41.     addChild(tableView);  
  42.   
  43.     //设置TableView的滚动方向  
  44.     //kCCScrollViewDirectionHorizonta表示在水平方向上滚动  
  45.     tableView->setDirection(kCCScrollViewDirectionHorizontal);  
  46.   
  47.     //加载数据  
  48.     tableView->reloadData();  
  49.   
  50.     tableView->setDelegate(this);  
  51.   
  52.     tableView->setPosition(center);  
  53.   
  54.     return true;  
  55. }  

执行结果:


0 0
原创粉丝点击