今天要写一个滚动列表功能,类似下面这样。(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便)
首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似的控件。
在cocos2d-x引擎中参照ios中的UITableView实现了一个叫做CCTableView的类,用于创建列表,对于熟悉ios程序设计的人来说,这个内容应该是很好理解的。
下面就介绍下CCTableView。
首先,mark几个比较好的博文。
//触摸到某个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);
//设置单元格高亮的状态
virtual void tableCellHighlight(CCTableView* table, CCTableViewCell* cell);
//设置单元格非高亮的状态
virtual void tableCellUnhighlight(CCTableView* table, CCTableViewCell* cell);//由于CCTableView是继承CCScrollView,所以要继承这两个方法
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view) {}
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}class HelloWorld : public cocos2d::CCLayer,public cocos2d::extension::CCTableViewDelegate,public cocos2d::extension::CCTableViewDataSource{
};
//
// GameInfo.h
// RunGame
//
// Created by 余龙泽 on 14-3-28.
//
//
#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
// RunGame
//
// Created by 余龙泽 on 14-3-28.
//
//
#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)
{
}
cocos2d-x - 滚动列表(类似天天酷跑道具菜单)详解(CCScrollView的使用),布布扣,bubuko.com
cocos2d-x - 滚动列表(类似天天酷跑道具菜单)详解(CCScrollView的使用)
原文:http://blog.csdn.net/hitwhylz/article/details/22522841