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。实现须要的方法(上述列举的三类中, 当中两类必须实现。 另一类可选。)

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

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

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-13 03:08:14

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

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

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

在滚动列表中实现视频的播放(ListView &amp; RecyclerView)

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

(更新版)Android VideoPlayer 在滚动列表实现item视频播放(ListView控件和RecyclerView)

由于写这篇文章时挂着梯子 ,回来发现没有图片 对不起各位了-.. 现在我改好了! 2016.5.27 15时 阴 at BJ 转载请标明出处:粪乧 http://blog.csdn.net/wooder111/article/details/51513582 原文翻译: 点击跳转 在这篇文章中,我将介绍如何实现列表中的视频播放.在流行的应用,如Facebook,Instagram的或Magisto的工作原理相同: Facebook的: Magisto的: Instagram的: 这篇文章是基于开

Android在滚动列表中实现视频的播放 ListView RecyclerView

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

列表组件抽象(4)-滚动列表及分页说明

这是我写的关于列表组件的第4篇博客.前面的相关文章有: 1. 列表组件抽象(1)-概述 2. 列表组件抽象(2)-listViewBase说明 3. 列表组件抽象(3)-分页和排序管理说明 本文介绍列表组件中我对滚动列表及滚动分页的实现思路. 在pc端,通过滚动进行翻页的需求非常常见:移动端也是,只不过移动端由于scroll事件触发有延迟,必须等到屏幕停止滑动后才会触发,而不是在用户的手指离开屏幕就立即触发,所以移动端最好是不用scroll事件直接做滚动翻页,而是用iscroll这类插件提供更实

Jquery制作--循环滚动列表

自己模仿JQ插件的写法写了一个循环滚动列表插件,支持自定义上.下.左.右四个方向,支持平滑滚动或者间断滚动两种方式,都是通过参数设置.JQ里面有些重复的地方,暂时没想到更好的方法去精简.不过效果还是可以的,如下(效果图上传后都加速了,实际效果比这个要慢很多): html代码如下: <!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <

用Vue来实现音乐播放器(十六):滚动列表的实现

滚动列表是一个基础组件  他是基于scroll组件实现的 在base文件夹下面创建一个list-view文件夹 里面有list-view.vue组件   <template> <!-- 当父组件传递给子组件的数据发生变化的时候 scroll可以监听到此时高度会发生变化 --> <!-- 子组件这里的:data和props里面的data相对于 --> <!-- 父传子的时候 data是对应的props里面的值 --> <scroll class=&quo

当滚动列表的时候,让input框失去焦点(移动端会收起键盘)

1.拓展scroll.vue事件 1 beforeScroll:{ 2 type:Boolean, 3 default:false 4 } 5 6 7 if(this.beforeScroll){//滚动列表的时候收起键盘(移动端) 8 this.scroll.on('beforeScrollStart',()=>{ 9 this.$emit('beforeScroll') 10 }) 11 } 2.在suggest.vue里声明beforeScrll:true,并$emit(beforeScr

微信小程序实现无限滚动列表(滚动新闻动态列表)

本文实例为大家分享了微信小程序实现无限滚动列表的具体代码,供大家参考,具体内容如下 实现方式是利用小程序原声组件swiper,方向设置为纵向 :vertical=‘true'设置同时显示的滑块数量:display-multiple-items=‘4'设置自动轮播:autoplay:‘true'. 话不所说,直接上代码: <!-- 底部排名 --> <view class='contentBottom'> <view class='BottomFirst'> <te