c++cocos2d-xcocos2d-x-3.x

OnTouchMove event not triggered


I'm trying to drag and drop a sprite in a simple scene. The onTouchBegan and onTouchEnded events trigger as they should but the onTouchMove event doesn't trigger, why ?

Here is my code :

class Test: public cocos2d::Layer
{
public:

    static cocos2d::Scene* createScene();
    virtual bool init();
    CREATE_FUNC(Test);

    bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event);
    void onTouchMove(cocos2d::Touch *touch, cocos2d::Event *event);
    void onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event);


    cocos2d::Sprite *catSprite;
    cocos2d::Vec2 touchPosition;
};

And for the Cpp :

Scene* Test::createScene()
{
    auto scene = Scene::create();
    auto layer = Test::create();

    scene->addChild(layer);

    return scene;
}

bool Test::init()
{
    if ( !Layer::init() )
    {
        return false;
    }

    auto origin  = Director::getInstance()->getVisibleOrigin();
    auto windowSize = Director::getInstance()->getVisibleSize();

    auto background = DrawNode::create();
    background->drawSolidRect(origin, windowSize, Color4F(0.6, 0.6, 0.6, 1.0));
    this->addChild(background, -1);

    auto releaseArea = DrawNode::create();
    releaseArea->drawSolidRect(windowSize*0.8,windowSize, Color4F(1.0,0.0,0.0,1.0));    
    this->addChild(releaseArea);

    auto pinfo = AutoPolygon::generatePolygon("cat.png");
    catSprite = Sprite::create(pinfo);
    catSprite->setPosition(Vec2(windowSize.width*0.1, windowSize.height*0.1));
    this->addChild(catSprite,1);

    touchPosition.set(0,0);


    auto dispatcher = Director::getInstance()->getEventDispatcher();
    auto listener = EventListenerTouchOneByOne::create();

    listener->onTouchBegan = CC_CALLBACK_2(Test::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(Test::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(Test::onTouchEnded, this);

    dispatcher->addEventListenerWithSceneGraphPriority(listener, this);


    return true;
}

bool Test::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event) {
    cocos2d::log("touch began");
    touchPosition = touch->getLocation();

    if(catSprite->getBoundingBox().containsPoint(touchPosition))
    {
        return true;
    }

    return false;
}

void Test::onTouchMove(cocos2d::Touch *touch, cocos2d::Event *event) {
    cocos2d::log("touch moved");
    catSprite->setPosition(catSprite->getPosition() + touch->getDelta());
}

void Test::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event) {
    cocos2d::log("touch ended");
}

I got the right feedback from cocos2d::log for the began and ended events, but the move event seem to never happen when i test it.


Solution

  • The event is called onTouchMoved and not onTouchMove.

    Regards. Myself.