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

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

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

以下就介绍下CCTableView。

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

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

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

必须实现:

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的使用)的更多相关文章

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

    英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放. ...

  2. Android 在滚动列表中实现视频的播放(ListView & RecyclerView)

    这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载源码,并结合源代码一起阅读本文.但是即便是没有 ...

  3. Jquery制作--循环滚动列表

    自己模仿JQ插件的写法写了一个循环滚动列表插件,支持自定义上.下.左.右四个方向,支持平滑滚动或者间断滚动两种方式,都是通过参数设置.JQ里面有些重复的地方,暂时没想到更好的方法去精简.不过效果还是可 ...

  4. Android 高级UI设计笔记09:Android如何实现无限滚动列表

    ListView和GridView已经成为原生的Android应用实现中两个最流行的设计模式.目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们提供了一个良好,整洁的用户体验 ...

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

    1.拓展scroll.vue事件 beforeScroll:{ type:Boolean, default:false } if(this.beforeScroll){//滚动列表的时候收起键盘(移动 ...

  6. Android 高级UI设计笔记09:Android实现无限滚动列表

    1. 无限滚动列表应用场景: ListView和GridView已经成为原生的Android应用实现中两个最流行的设计模式.目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们 ...

  7. 一次react滚动列表的实践---兼容ios安卓

    一.背景 近期项目改版,对原有的h5页面进行了重新设计,数据呈现变成了瀑布流.希望新版兼容ios和安卓两端的情况下,无限制的刷新加载数据.大致效果如下: 整个页面分4部分: 顶部导航 步数状态卡片 用 ...

  8. 【js】我们需要无限滚动列表吗?

    无限滚动列表,顾名思义,是能够无限滚动的列表(愿意是指那些能够不断缓冲加载新数据的列表的).但是,我们真的需要这样一个列表吗?在PC端,浏览器的性能其实已经能够满足海量dom节点的渲染刷新(笔者经过简 ...

  9. WebApp 滚动列表的实现

    实现效果: 实现技术:overflow,flex,element::-webkit-scrollbar 实现步骤: //html:代码<div id="slider"> ...

随机推荐

  1. KMP的next[]数组

    KMP是众多字符串问题的基础 理解next数组尤为重要 next又称前缀数组 是 它所处位置的前一个位置的元素 与 该链 链首开始 几个元素相匹配(即相同) 举个实例来说明: next对应的是该位置的 ...

  2. easyui源码翻译1.32--Calendar(日历)

    前言 前几天加班比较忙 未能及时更新翻译的 今天多发布几篇..下载该插件翻译源码 日历控件显示一个月的日历,允许用户选择日期和移动到下一个或上一个月.默认情况下,一周的第一天是周日.它可以通过设置'f ...

  3. 驱动开发 - WDK 调试及 SVN 环境搭建

    由于从公司辞职了,所以以前在公司里搭建的驱动开发环境也就 Game Over 了, 同样由于那环境是很久以前搭建的,自己也有很多记不清楚的地方了, 而且其中还是有很多需要注意的地方的,所以在这里顺便做 ...

  4. Android开发中一些被冷落但却很有用的类和方法

    MediaMetadataRetriever 顾名思义,就是用来获取媒体文件一些相关信息的类.包括一首歌的标题,作者,专辑封面和名称,时长,比特率等等.如果是视频的话,可以获取视频的长宽,预览图. h ...

  5. php陷阱:字符串和数字比较

    PHP中的比较运算符有点诡异,很容易出错,现列出比较规则: 1.当两个字符进行大小比较时,是比较着这两个字符的ASCII码大小——这条很容易理解. 2.当两个字符串进行大小比较时,是从第一个字符开始, ...

  6. logstash gsub替换

    { "message" => "192.168.11.186,192.168.11.187\t48391,3306\tDec 7, 2016 13:26:25.13 ...

  7. 1uboot移植要点[原创☆☆]

    ----- 一:我们先来了解下实际内存: nand.nor.ram. 所以从CPU是从那部分启动的呢? 答:要看主控芯片的boot如何设置(正如分的启动方式和下载方式一样). uboot:sd卡→iR ...

  8. Virtual member call in a constructor

    http://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor (Assuming you're writ ...

  9. EF双向一对一中的坑

    EF版本 6.0 在项目中双向一对一关系是普遍存在的,如果不仔细检查,并不容易发现这个坑 下面新建两个类(假设这两个类是一对一的关系)对应实体都设置为可延迟加载 映射关系为: 再建一个数据访问类: 运 ...

  10. visual studio 2012更换皮肤、功能添加

    首先在vs2012的菜单:工具->扩展和更新,打开扩展和更新窗口,点击左侧“联机”,搜索栏里面输入Theme Editor.然后点击按钮,安装之后,在工具->选项->环境常规 面板上 ...