Cocos2d-x::TableView关卡设计,文…

前端之家收集整理的这篇文章主要介绍了Cocos2d-x::TableView关卡设计,文…前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、关卡选择的设计

1.TableView相关类在扩展包里,需要声明:
#include “cocos-ext.h"
USING_NS_CC_EXT;

2. 自定义TableView继承于CCLayer,因此可以 捕获触摸,同时继承于扩展包的CCTableViewDataSource和CCTableViewDelegate。前者是TableView的数据 源,包含了一系列和TableView数据单元相关的操作,后者则是继承于CCScrollViewDelegate抽象类,声明了一些和滚动,放大,触 摸回调之类的接口,然后在内部包含了一个CCTableView,这用起来有点像Android的Adapter;@H_301_17@

@H_301_17@
3.实现@H_301_17@

@H_301_17@
3.1 init()
CCSize winSize = CCDirector::sharedDirector()->getWinSize();@H_301_17@
CCTableView* tableView = CCTableView::create(this,winSize);@H_301_17@

@H_301_17@
tableView->setDirection(kCCScrollViewDirectionHorizontal);//设置方向@H_301_17@
tableView->setPosition(ccp(0,winSize.height/2-50));@H_301_17@
tableView->setDelegate(this);@H_301_17@

@H_301_17@
this->addChild(tableView);@H_301_17@
tableView->reloadData();@H_301_17@

@H_301_17@
3.2 触摸回调tableCellTouched@H_301_17@
void TableViewTestLayer::tableCellTouched(CCTableView* table,CCTableViewCell* cell)@H_301_17@
{@H_301_17@
CCLOG(“cell touched at index: %i”,cell->getInd());
}@H_301_17@

@H_301_17@
3.3 单元大小tableCellSizeForIndex@H_301_17@
CCSize TableViewTestLayer::tableCellSizeForIndex(CCTableView* table,unsigned int idx)@H_301_17@
{@H_301_17@
return CCSizeMake(120,120);
@H_301_17@
}@H_301_17@

@H_301_17@
3.4 设置数据源tableCellAtIndex@H_301_17@
CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView* table,unsigned int idx)
{
CCString* string = CCString::createWithFormat(“%d”,idx);
CCTableViewCell* cell = table->dequeueCell();
if(!cell){
cell = new CCTableViewCell();
cell->autorelease();
CCSprite* sprite = CCSprite::create(“HelloWorld.png”);
sprite->setScale(0.2f);
sprite->setPosition(ccp(60,60));
sprite->setTag(123);
cell->addChild(sprite);

CCLableTTF* label = CCLabelTTF::create(string->getCString(),”Helvetica”20.0);
label->setPosition(ccp(60,10));
label->setTag(456);
cell->addChild(label);
}else{
CCLabelTTF* label = (CCLabelTTF* )cell->getChildByTag(456);
label->setString(string->getCString());
}
return cell;
}

二、文字拖曳和定位(Text1222)

1.加入精灵和文字精灵(略)

@H_301_17@
2.触摸实现和拖拽定义@H_301_17@
2.1 注册触摸事件@H_301_17@
void AutoSet::registerWithTouchDispatcher(void)@H_301_17@
{@H_301_17@
CCDirector* pDirector = CCDirector::sharedDirector();@H_301_17@
pDirector->getTouchDispatcher()->addTargetedDelegate(this,true);@H_301_17@
}@H_301_17@
2.2 触摸开始@H_301_17@
bool AutoSet::ccTouchBegan(cocos2d::CCTouch* pTouch,cocos2d::CCEvent* pEvent)@H_301_17@
{@H_301_17@
return true;
@H_301_17@
}@H_301_17@
2.3* 触摸过程@H_301_17@
void AutoSet::ccTouchMoved(cocos2d::CCTouch* pTouch,cocos2d::CCEvent* pEvent)@H_301_17@
{@H_301_17@
CCPoint beginPoint = pTouch->getLocationInView();@H_301_17@
beginPoint = CCDirector::sharedDirector()->convertToGL(beginPoint);@H_301_17@
CCPoint pt = text->getPosition();@H_301_17@
CCRect rect = CCRectMake(pt.x-30,pt.y-30,60,60);@H_301_17@
if(rect.containsPoint(beginPoint)@H_301_17@
{@H_301_17@
CCPoint endPoint = pTouch->getPrevIoUsLocationInView();@H_301_17@
endPoint = CCDirector::sharedDirector()->convertToGL(endPoint);@H_301_17@
@H_301_17@
CCPoint offSet = ccpSub(beginPoint,endPoint);@H_301_17@
CCPoint toPoint = ccpAdd(text->getPosition(),offset);@H_301_17@
text->setPosition(toPoint);@H_301_17@
}
@H_301_17@
}@H_301_17@
2.4 触摸结束@H_301_17@
void AutoSet::ccTouchEnded(CCTouch* pTouch,CCEvent* pEvent)@H_301_17@
{@H_301_17@
CCPoint lastPoint = pTouch->getLocationInView();@H_301_17@
lastPoint =CCDirector::sharedDirector()->convertToGL(lastPoint);@H_301_17@
CCRect rect = CCRectMake(330,130,60);@H_301_17@
CCMoveTo* moveto;@H_301_17@
if(!rect.containsPoint(lastPoint))@H_301_17@
{@H_301_17@
moveto = CCMoveTo::create(0.1f,cup(120,160)); @H_301_17@
}@H_301_17@
else@H_301_17@
{@H_301_17@
moveto = CCMoveTo::create(0.1f,ccp(360,160));
}@H_301_17@
text->runAction(moveto);@H_301_17@
}@H_301_17@

@H_301_17@
结后语:这个有点类似于iOS中的UITableView的写法,实际上是一样的东西,有学过iOS的同学会比较好理解! @H_301_17@

猜你在找的Cocos2d-x相关文章