0

シンプルなシーンでスプライトをドラッグ アンド ドロップしようとしています。onTouchBegan および onTouchEnded イベントは正常にトリガーされますが、onTouchMove イベントはトリガーされません。なぜですか?

これが私のコードです:

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;
};

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");
}

開始イベントと終了イベントについて cocos2d::log から正しいフィードバックを得ましたが、テストしたところ移動イベントは発生していないようです。

4

1 に答える 1

1

イベントは onTouchMove ではなく onTouchMoved と呼ばれます。

よろしく。自分自身。

于 2015-12-29T20:48:21.760 に答える