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

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

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

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

首先,这样一个列表就和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);
     
    
return
scene;
}
 
bool GameInfo::init()
{
    
if
( !CCLayer::init() )
    
{
        
return
false
;
    
}
     
    
//获取屏幕大小
    
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();
     
    
return
true
;
}
 
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)
{
    
return
6;
}
 
//生成cell
CCTableViewCell* GameInfo::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
    
CCString *nameString=CCString::createWithFormat(
"cell_%d.png"
,idx);
     
    
CCTableViewCell *cell = table->dequeueCell();
     
    
if
(!cell)
    
{
         
        
cell =
new
CCTableViewCell();
         
        
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);
 
    
}
     
     
    
return
cell;
     
     
}
 
 
CCSize GameInfo::cellSizeForTable(CCTableView *table)
{
    
return
CCSizeMake(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)
{
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118996.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月24日 下午2:00
下一篇 2021年11月24日 下午3:00


相关推荐

  • 代理服务器调研[通俗易懂]

    代理服务器调研[通俗易懂]1.名词解释:代理服务器是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接国际互联网和局域网。2.相关概念(1)代理也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保

    2022年5月5日
    43
  • django使用celery_apache django

    django使用celery_apache django前言环境celery==5.0.2在安装完celery后,运行celery会报以下错误ModuleNotFoundError:Nomodulenamed'click._bashc

    2022年7月31日
    10
  • LaTeX:引号

    LaTeX:引号LaTeX;LaTeX引号;LaTeX单引号;LaTeX双引号。

    2022年6月25日
    53
  • 以太网基础-MAC和PHY

    以太网基础-MAC和PHY网卡 NetworkInter 简称 NIC 也称网络适配器 是电脑与局域网相互连接的设备 无论是普通电脑还是高端服务器 只要连接到局域网 就都需要安装一块网卡 如果有必要 一台电脑也可以同时安装两块或多块网卡 电脑之间在进行相互通讯时 数据不是以流而是以帧的方式进行传输的 我们可以把帧看做是一种数据包 在数据包中不仅包含有数据信息 而且还包含有数据的发送地 接收地信息和数据的校验信息 一个网卡主要包括 OSI 的最下面的两层 物理层和数据链路层物理层定义了数据传送与接收所需要的电与

    2026年3月18日
    2
  • java虚拟机 百度云盘_22 深入拆解 Java 虚拟机【完结】百度云盘「建议收藏」

    java虚拟机 百度云盘_22 深入拆解 Java 虚拟机【完结】百度云盘「建议收藏」22深入拆解Java虚拟机【完结】百度云盘798资源网免责声明:[22深入拆解Java虚拟机【完结】百度云盘]由分享人bo***jie于2020-01-1618:29上传到百度网盘。此页面由java农村野外hd自动抓取,以非人工方式自动生成,只作交流和学习使用。本网站本身不储存任何资源文件,其资源文件的安全性和完整性需要您自行判断,感谢您对本站的支持。22深入拆解J…

    2022年7月8日
    27
  • requiredargsconstructor_gridview控件的事件有哪些

    requiredargsconstructor_gridview控件的事件有哪些1ItemDataBound:数据绑定的时候(正在进行时)发生。2ItemCommand:用来响应Item模板中的控件的事件。如下代码aspx代码:[html]viewplaincopy<asp:RepeaterID=”Repeater1″runat=”server”DataSourceID=”LinqDataSource1…

    2022年10月12日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号