Cocos2d-x滚动列表详解(CCScrollView的使用)

今天要写一个滚动列表功能,类似下面这样。(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便)

首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似的控件。

在cocos2d-x引擎中参照ios中的UITableView实现了一个叫做CCTableView的类,用于创建列表,对于熟悉ios程序设计的人来说,这个内容应该是很好理解的。

下面就介绍下CCTableView。

首先,mark几个比较好的博文。

Cocos2d-x CCTableView实现列表:http://www.tuicool.com/articles/viaQn2

cocos2d-x CCTableView:http://www.cnblogs.com/sevenyuan/archive/2013/07/25/3214534.html

cocos2d-x CCScrollView和CCTableView的使用:http://www.tuicool.com/articles/fuemq2

另外.先介绍下涉及的几个常用方法。

必须实现:


1

2

3

4

5

6

7

8

9

10

11

//触摸到某个cell的事件

    virtual
void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);

    

    //定制每个cell的size

    virtual
cocos2d::CCSize tableCellSizeForIndex(cocos2d::extension::CCTableView *table, unsigned int idx);

    

    //定制每个cell的内容

    virtual
cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);

    

    //确定这个tableview的cell行数

    virtual
unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);

选择实现:


1

2

3

4

//设置单元格高亮的状态

    virtual
void tableCellHighlight(CCTableView* table, CCTableViewCell* cell);

    //设置单元格非高亮的状态

    virtual
void tableCellUnhighlight(CCTableView* table, CCTableViewCell* cell);

必须实现:


1

2

3

//由于CCTableView是继承CCScrollView,所以要继承这两个方法

    virtual
void scrollViewDidScroll(cocos2d::extension::CCScrollView* view) {}

    virtual
void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}

下面介绍实现方法。

1。使用的时候要注意要引入扩展库文件: #include "cocos-ext.h" ,并且最好要添加: USING_NS_CC_EXT ; 这样就不用老是加前缀cocos2d::extension。

2。要继承CCTableView的两个代理 CCTableViewDelegate 和 CCTableViewDataSource。比如:


1

2

class
HelloWorld : public cocos2d::CCLayer,public cocos2d::extension::CCTableViewDelegate,public cocos2d::extension::CCTableViewDataSource{ 

};

3。实现需要的方法(上述列举的三类中, 其中两类必须实现。 还有一类可选。)

简单三不,就能定制属于你自己的列表了。很简单吧。

下面给出上述天天酷跑道具列表的实现代码。

GameInfo.h


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

//

// 
GameInfo.h

// 
RunGame

//

// 
Created by zhanglin on 14-05-14.

//

//

#ifndef
__RunGame__GameInfo__

#define
__RunGame__GameInfo__

#include
<iostream>

#include
"cocos2d.h"

#include
"cocos-ext.h"

USING_NS_CC_EXT;//cocos2dx定义的宏

using
namespace cocos2d;

class
GameInfo : public cocos2d::CCLayer,public cocos2d::extension::CCTableViewDelegate,cocos2d::extension::CCTableViewDataSource

{

public:

    virtual
bool init();

    static
cocos2d::CCScene* scene();

    

    void
menuCloseCallback(CCObject* pSender);

    

    

public:

    

    //CCTableViewDelegate继承自CCScrollViewDelegate

    virtual
void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);

    

    virtual
void scrollViewDidZoom(cocos2d::extension::CCScrollView* view);

    

    //点击哪个cell

    virtual
void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);

    //每个cell的size

    virtual
cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);

    //生成cell

    virtual
cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);

    //cell的数量

    virtual
unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);

    

    //按下去的时候,就是高亮显示,这里可以设置高亮状态

    virtual
void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);

    

    //松开的时候,取消高亮状态

    virtual
void tableCellUnhighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);

    

    

    

    void
scrollBar(cocos2d::extension::CCTableView* table);

    CREATE_FUNC(GameInfo);

};

#endif
/* defined(__RunGame__GameInfo__) */

GameInfo.cpp


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

//

// 
GameInfo.cpp

// 
RunGame

//

// 
Created by
zhanglin on 14-05-14.

//

//

#include
"GameInfo.h"

#include
"SimpleAudioEngine.h"

using
namespace cocos2d;

using
namespace CocosDenshion;

CCScene*
GameInfo::scene()

{

    CCScene
*scene = CCScene::create();

    

    GameInfo
*layer = GameInfo::create();

    scene->addChild(layer);

    

    returnscene;

}

bool
GameInfo::init()

{

    if(
!CCLayer::init() )

    {

        returnfalse;

    }

    

    //获取屏幕大小

    CCSize
visibSize=CCDirector::sharedDirector()->getVisibleSize();

    

    //设置背景

    CCSprite
*bg_ = CCSprite::create(
"pic_InfoBg.png");

    this->setPosition(ccp(visibSize.width/2,
visibSize.height/2));

    this->addChild(bg_);

    

    //添加列表

    CCTableView
*tableView=CCTableView::create(
this,
CCSizeMake(620, 450));

    

    tableView->setDirection(kCCScrollViewDirectionVertical);

    

    tableView->setPosition(ccp(-525,
-275));

    

    tableView->setAnchorPoint(ccp(0,
0));

    tableView->setDelegate(this);

    

    tableView->setVerticalFillOrder(kCCTableViewFillTopDown);

    

    this->addChild(tableView,1);

    

    tableView->reloadData();

    

    returntrue;

}

void
GameInfo::menuCloseCallback(CCObject* pSender)

{

    CCDirector::sharedDirector()->end();

#if
(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    exit(0);

#endif

}

//cell的数量

unsigned
int GameInfo::numberOfCellsInTableView(CCTableView *table)

{

    return6;

}

//生成cell

CCTableViewCell*
GameInfo::tableCellAtIndex(CCTableView *table, unsigned int idx)

{

    CCString
*nameString=CCString::createWithFormat(
"cell_%d.png",idx);

    

    CCTableViewCell
*cell = table->dequeueCell();

    

    if(!cell)

    {

        

        cell
=
newCCTableViewCell();

        

        cell->autorelease();

        

        //设置当前cell图片

        CCSprite
*iconSprite = CCSprite::create(nameString->getCString());

        iconSprite->setAnchorPoint(CCPointZero);

        iconSprite->setPosition(ccp(0,
0));

        iconSprite->setTag(123);

        cell->addChild(iconSprite);

        

    }

    else

    {

        

        //创建了就不需要再重新创建了,不然你会发现图片跟文字都不对

        CCTexture2D
*aTexture=CCTextureCache::sharedTextureCache()->addImage(nameString->getCString());

        

        CCSprite
*pSprite=(CCSprite *)cell->getChildByTag(123);

        

        pSprite->setTexture(aTexture);

    }

    

    

    returncell;

    

    

}

CCSize
GameInfo::cellSizeForTable(CCTableView *table)

{

    returnCCSizeMake(605,
105);

}

void
GameInfo::tableCellHighlight(CCTableView *table, CCTableViewCell *cell)

{

    

}

void
GameInfo::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell)

{

}

void
GameInfo::tableCellTouched(CCTableView *table, CCTableViewCell *cell)

{

    CCBlink
*blink_ = CCBlink::create(1.0f, 7);

    cell->runAction(blink_);

}

void
GameInfo::scrollViewDidScroll(cocos2d::extension::CCScrollView *view)

{

}

void
GameInfo::scrollViewDidZoom(cocos2d::extension::CCScrollView *view)

{

}

Cocos2d-x滚动列表详解(CCScrollView的使用),布布扣,bubuko.com

时间: 2024-10-10 21:01:16

Cocos2d-x滚动列表详解(CCScrollView的使用)的相关文章

Cocos2d-x滚动列表具体解释(CCScrollView的使用)

今天要写一个滚动列表功能,类似以下这样.(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便) 首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似的控件. 在cocos2d-x引擎中參照ios中的UITableView实现了一个叫做CCTableView的类,用于创建列表,对于熟悉ios程序设计的人来说,这个内容应该是非常好理解的. 以下就介绍下CCTableView. 首先,mark几个比較好的博文. Cocos2d-x CCTableVi

Cocos2d之Node类详解之节点树(二)

一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node类详解之节点树(一)>. 二.简介 节点 一个Node对象. 节点树 上篇文章介绍到,Node类有一个成员变量 Vector<Node*> _children,这是一个保存所有子节点的数组,因为Node类采用遍历树的方式获取子节点进行渲染,所以我管这两个东西的结合叫节点树. 三.源码详解 &

Cocos2d之Node类详解之ZOrder详解

一.声明 笔者以cocos2d框架的cocos2d-x-3.3rc0版本源码做分析.本文属于笔者原创,允许转载和分享,但请注明文章出处. 二.简介 ZOrder ZOrder顾名思义就是节点(Node对象)在Z轴上的排序,这样一来ZOrder越小就越优先显示.每个节点(Node对象)可以持有多个子节点,组成节点树(关于节点树的介绍查看<Cocos2d之Node类详解之节点树>一文).ZOder表示了节点树中每个子节点显示的优先级.值得注意的是,节点树中子节点的ZOder可能会一样,这种情况下父

Python列表详解

Python列表详解: 创建一个列表,只要把逗号分隔的不同数据项使用方括号括起来即可. 比如:    list = [1, 2, 3, 4, 5 ]; 与字符串的索引一样,列表索引从0开始. Python列表函数即方法: Python所包含的函数: 1.cmp() 描述: cmp()用于比较两个列表的元素. 语法: cmp (list1,list2) 返回值: 如果比较的元素是同类型的,则比较其值,返回结果. 如果两个元素不是同一种类型,则检查它们是否是数字. 如果是数字,执行必要的数字强制类型

Cocos2d之Texture2D类详解之将文件加载成Texture2D对象

一.声明 笔者以cocos2d框架cocos2d-x-3.3rc0版本的源码做分析.本文为笔者原创,允许转载和分享,只要注明文章出处即可. 二.简介 Texture2D类简介 Texture2D类允许开发者用图像.文本信息和简单的数据来创建OpenGL2D纹理.被创建的纹理拥有两个维度.根据开发者创建Texture2D对象方式的不同,实际图像的尺寸可能比生成的纹理的尺寸要小,而且纹理的内容是倒置的. 像素格式 在计算机图形学中,人们用每个像素在内存中的总位数以及分别存储红.蓝.绿和alpha(阿

Cocos2d之Node类详解之节点树(一)

一.声明 笔者分析的是用C++语言实现.版本号为cocos2d-x-3.3rc0的cocos2d框架的源代码.本文为笔者原创,允许读者分享和转载,只要读者注明文章来源即可. 二.简介 Node对象时场景图的基本元素,并且场景图的基本元素必须是Node对象和Node的子类对象.常见的Node类的子类有:Scene.Layer.Sprite.Menu和Label类. Node类主要实现几个特性: Node对象的 addChild(Node *child).getChildByTag(int tag)

jQuery实现滚动效果详解1

声明:第一次写原创,本人初学,很多地方一知半解,本篇算是一个学习的笔记,欢迎批评指正,转载请注明. 今天要做的效果是在网上经常能看到多幅图片向左无缝滚动,鼠标滑过动画暂停,鼠标滑出动画继续的效果.网上现成的代码和插件很多,拿来用有时候不大顺手,今天我就来学习一下它的原理. 要实现这个效果:1.需要一个展示区,滚动的内容只有通过展示区才能被看到id=visual_area2.把滚动的内容横向排列的载体,我们姑且叫它画布,注意不能理解PS中的画布class=scroll_area3.看起来要滚动的内

Cocos2D研究院之CCNode详解(三)

http://www.xuanyusong.com/archives/950 上一章我们了解了cocos2d的项目路径以及工作原理,这次作者要真刀真枪地讲解代码了,咱们先来看看cocos2d最常用.也是作者认为最核心的类——CCNode. 之前说过,cocos2d的所有类都以CC开头,那么实际上这个类的名字就是Node,类如其名,这个类的实例就是一个节点.Cocos2d的类是树状继承的,而在内存中,各个实例之间也是以“树”这种数据结构相关联的.,可见树在cocos2d中的重要性,难怪某位伟人说“

python系列(三)python列表详解

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 本博文阅读目录: 1)len函数//查看列表的个数 2)序列[索引号] //查看索引号对应的元素 3)在list中追加元素到末尾list.append("元素") 4)把元素插入到指定的位置 list.insert(索引号,"元素") 5)删除list末尾元素list.pop()和指定索引号元素 list.p