8,325
社区成员




#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
class CPaintScene : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate
{
public:
// 省略部分代码
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView *view);
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView *view);
//处理触摸事件,可以计算点击的是哪一个子项
virtual void tableCellTouched(CCTableView *table, CCTableViewCell *cell);
//每一项的宽度和高度
virtual CCSize cellSizeForTable(CCTableView *table);
//生成列表每一项的内容
virtual CCTableViewCell *tableCellAtIndex(CCTableView *table, unsigned int idx);
//一共多少项
virtual unsigned int numberOfCellsInTableView(CCTableView *table);
}
void CPaintScene::tableCellTouched(CCTableView *table, CCTableViewCell *cell)
{
CCLOG("cell touched at index: %i", cell->getIdx());
CCSprite *temp = (CCSprite *)(cell->getChildByTag(1));
//temp->setPositionX(20.f);
}
CCTableViewCell *CPaintScene::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
// 格式化相应的图片名称
CCString *pString = CCString::createWithFormat("%d.png", idx + 1);
CCTableViewCell *pCell = table->dequeueCell();// 返回空闲的(被释放的)子项?
if (!pCell)
{
pCell = new CCTableViewCell();
pCell->autorelease();
//CCSprite *pSprite = CCSprite::create("building.png");
CCSprite *penSprite = CCSprite::createWithSpriteFrameName(pString->getCString());
penSprite->setAnchorPoint(CCPointZero);
penSprite->setPosition(CCPointZero);
pCell->addChild(penSprite, 0, idx);
CCLabelTTF *pLabel = CCLabelTTF::create(pString->getCString(), "Arial", 20.0);
pLabel->setPosition(CCPointZero);
pLabel->setAnchorPoint(CCPointZero);
pLabel->setTag(123);
pCell->addChild(pLabel);
}
else
{
CCLabelTTF *pLabel = (CCLabelTTF *)pCell->getChildByTag(123);
pLabel->setString(pString->getCString());
}
return pCell;
}
CCTableViewCell *CPaintScene::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
// 格式化相应的图片名称
CCString *pString = CCString::createWithFormat("%d.png", idx + 1);
CCTableViewCell *pCell = table->dequeueCell();// 返回空闲的(被释放的)子项?
if (!pCell)
{
pCell = new CCTableViewCell();
pCell->autorelease();
//CCSprite *penSprite = CCSprite::create("building.png");
CCSprite *penSprite = CCSprite::createWithSpriteFrameName(pString->getCString());
penSprite->setAnchorPoint(CCPointZero);
penSprite->setPosition(CCPointZero);
penSprite->setTag(100); // 此句
因为pCell都是通过 table->dequeueCell返回,而每个pCell都是单独的,或者说每个SPRITE对应一个新的pCell
像我上面写的 pCell->addChild(penSprite, 0, idx); 就等于当成了所有单独的pCell是一个整体,而且每次SETTAG的值都不
同,那在我点击相应的 pCell时,自然就得不到对应的精灵了, 毕竟每个pCell上只有一个SPRITE,所以给其设置相同的TAG,
才能返回其SPRITE对象。 就是这样了,一开始没搞清其概念。