cocos2d-x 精灵移动

在HelloWorldScene.h中声明

class HelloWorld : public cocos2d::CCLayer
{
public:
    ......
    CCPoint convertToGL(CCSet *pTouches);
    
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *event);
private:
    CCSprite *m_pSprite;
};

在HelloWorldScene.cpp中作如下声明

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    
bool bRet = false;
    
do
    {
        CC_BREAK_IF(! CCLayer::init());
        ......
        
//MYCode
        m_pSprite = CCSprite::create("luffy.png");
        
//CCSize size=CCDirector::sharedDirector()->getWinSize();//note
        m_pSprite->setPosition(ccp(size.width / 2, size.height / 2));
        
this->addChild(m_pSprite, 1); //note
        this->setTouchEnabled(true);

        bRet = 
true;
    }
    
while (0);

    
return bRet;
}
CCPoint HelloWorld::convertToGL(CCSet *pTouches)
{
    if(pTouches)
    {
        CCSetIterator it = pTouches->begin();
        CCTouch *touch = (CCTouch *)(*it);
        CCPoint m_tBeginPos = touch->locationInView();
        m_tBeginPos = CCDirector::sharedDirector()->convertToGL(m_tBeginPos);
        
return m_tBeginPos;
    }
    assert(
"pTouches is NULL");
}
void HelloWorld::ccTouchesMoved(CCSet *pTouches, CCEvent *event)
{
    CCPoint touch_pos = convertToGL(pTouches);
    CCPoint cur_pos = m_pSprite->getPosition();
    
if(ccpDistance(touch_pos, cur_pos) != 0)
    {
        
int dx = touch_pos.x - cur_pos.x;
        
int dy = touch_pos.y - cur_pos.y;
        CCPoint vector = CCPoint::CCPoint(dx, dy);
        
double dist = sqrt(dx * dx + dy * dy * 1.0); //note
        CCPoint unit_vector = CCPoint::CCPoint(dx / dist, dy / dist);
        
int speed = 1;
        m_pSprite->setPosition(ccp(cur_pos.x + unit_vector.x * speed, cur_pos.y + unit_vector.y * speed));
    }
}

程序实现的效果是

sprite会以规定的速度向鼠标所在位置靠近

原文地址:https://www.cnblogs.com/java20130725/p/3215836.html