COCOS2D-X之精灵移动到所点击的位置Demo
这个Demo的效果就是当在电脑上用鼠标或在手机上不断用用手指点击屏幕的时候,对应的精灵会移动到最近一个点击的位置.
一、首先我们在初始化的时候添加好要移动的精灵和开启触屏响应.开启触屏响应只要调用一个函数既可:
[cpp]
setTouchEnabled(true);//CCLayer默认是不响应触屏事件的
我们可以简单看下这个函数的实现如下:
[cpp]
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)函数如下:
[cpp]
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是一个迭代器,其定义如下:
[cpp]
typedef std::set<CCObject *>::iterator CCSetIterator;
②、CCSet类的结构如下:
[cpp] view plaincopy
class CCSet : public CCObject
{
public:
****************************
private:
std::set<CCObject *> *m_pSet;
}
PS:因为是基础学习,故不作过多分析.后继会有更多精彩内容,敬请大家关注
本人郑重声明如下
一、本文来自CDN博客,本文地址http://t.cn/z86WXvT
二、All Rights Reserved. 任何个人或网站转载本文时不得移除本声明.
三、不得对文章进行修改,除非明确说明.同时欢迎大家评论转载和分享.
补充:移动开发 , 其他 ,