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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JavaScript进阶(八)JS实现图片预览并导入服务器功能

    JavaScript进阶(八)JS实现图片预览并导入服务器功能JS实现导入文件功能赠人玫瑰,手留余香。若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉!(PS:此篇博文是自己在午饭时间所写,为此没吃午饭,这就是程序猿的生活。)项目开发过程中,需要实现文件上传功能。借此机会学习之。使用HTML中现有的inputtype“file”可以支持这一功能。如下所示:

    2022年7月14日
    14
  • py文件的运行

    安装过程及配置安装过程及配置安装过程及配置安装过程准备:下载好Python的安装程序后,开始安装,在进入安装界面后一定确保勾选将Python加入到系统环境变量的路径里。如图所示:2如果没有

    2022年3月29日
    75
  • python中/和//的区别

    python中/和//的区别“/”为浮点数除法,返回浮点结果“//”表示整数除法,返回不大于结果的一个最大整数print("6/4="+str(6/4))//1.5print

    2022年7月5日
    26
  • map转map_java获取map的值

    map转map_java获取map的值String转map:Mapmap_new=newGson().fromJson(s,map.getClass());//需要引入jar包引用的jar<!–配置gson–><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.2.4</v.

    2022年9月10日
    0
  • 医学图像处理最全综述「建议收藏」

    目录0、引言1、病变检测2、图像分割基于深度学习的医学图像分割与检测3、图像配准图像配准的定义4、图像融合5、预测与挑战6、结论参考文献0、引言医学图像处理的对象是各种不同成像机理的医学影像,临床广泛使用的医学成像种类主要有X-射线成像(X-CT)、核磁共振成像(MRI)、核医学成像(NMI)、超声波成像(UI)四类。在目前的影像医疗诊断中,主要是通过观察一组二维切片图象去发现病变体,这往往需要借助医生的经验来判定。利用计算机图像处理技术对二维切片图象进行.

    2022年4月7日
    198
  • PAD图主要特点「建议收藏」

    PAD图主要特点「建议收藏」PAD图主要特点1.PAD图表示的程序结构的执行顺序是自最左边的竖线的上端开始,自上而下,自左向右。2.用PAD图表示的程序片段结构清晰,层次分明3.支持自顶向下、逐步求精的设计方法4.只能用于结构化的程序设计5.PAD图不仅可以表示程序逻辑,还能表示数据结构…

    2022年8月13日
    1

发表回复

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

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