这个Demo的效果就是当在电脑上用鼠标或在手机上不断用用手指点击屏幕的时候,对应的精灵会移动到最近一个点击的位置.
一、首先我们在初始化的时候添加好要移动的精灵和开启触屏响应.开启触屏响应只要调用一个函数既可:
setTouchEnabled(true);//CCLayer默认是不响应触屏事件的
我们可以简单看下这个函数的实现如下:
void CCLayer::setTouchEnabled(bool bEnabled)
{
if (m_bTouchEnabled != bEnabled)
{
m_bTouchEnabled = bEnabled;
if (m_bRunning)
{
if (bEnabled)//如果响应触屏事件则进行注册
{
this->registerWithTouchDispatcher();
}
else
{
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
}
}
}
}
二、我们重写CCLayer的void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)函数如下:
void MainLayer::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
CCSetIterator it= pTouches->begin(); //获取最近的一个点击的对象
CCTouch* pTouch = (CCTouch*)(*it);
CCPoint ptLocation= pTouch->getLocation(); //获得点击的坐标值
CCNode* pSprNode = getChildByTag(kTagSprite);//获取要移动的精灵的指针
if(pSprNode != NULL)
{
pSprNode->stopAllActions();//停止之前的所有动作
pSprNode->runAction(CCMoveTo::create(1,CCPointMake(ptLocation.x, ptLocation.y)));//移动到点击的位置
}
}
三、补充说明:
①、CCSetIterator是一个迭代器,其定义如下:
typedef std::set<CCObject *>::iterator CCSetIterator;
②、CCSet类的结构如下:
class CCSet : public CCObject
{
public:
****************************
private:
std::set<CCObject *> *m_pSet;
}
PS:因为是基础学习,故不作过多分析.后继会有更多精彩内容,敬请大家关注