首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node对象外部的触摸也响应了touch事件。

Node对象外部的触摸也响应了touch事件。
EN

Stack Overflow用户
提问于 2015-03-25 14:24:27
回答 1查看 266关注 0票数 0

在我的代码中,我添加了两个sprites,它的类型是大小为110*150的.png。两个触控听者被分派到每个精灵。不知怎么的,无论我触摸哪里,listerner2和侦听器都会响应,即使我触摸出了精灵,代码也会打印listener2listener1,不管我在哪里,我的代码有什么问题?

代码语言:javascript
复制
Scene* DemoScene::create()
{
    auto demoScene = Scene::create();

    if (demoScene == NULL) {
        return NULL;
    }



    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    auto demoSprite = Sprite::create("1.png");
    demoSprite->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height/2));
    demoScene->addChild(demoSprite);



    auto demoSprite2 = Sprite::create("1.png");
    demoSprite2->setPosition(Vec2(origin.x + visibleSize.width/3, origin.y + visibleSize.height/3));
    demoScene->addChild(demoSprite2);



    auto listener = EventListenerTouchOneByOne::create();
//    listener->setSwallowTouches(true);
    listener->onTouchBegan = [](Touch *touch, Event *event){
        printf("listener1");
        return true;
    };

    auto listener2 = EventListenerTouchOneByOne::create();
//    listener2->setSwallowTouches(true);
    listener2->onTouchBegan = [](Touch *touch, Event *event){
        printf("listener2");
        return true;
    };



    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, demoSprite);
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener2, demoSprite2);


    return demoScene;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 23:39:39

事件侦听器不检查龙头是否在Sprite中。你应该手动控制它。如果触及demoSprite,在onTouchBegan方法上返回true将防止将触摸传播到其他侦听器。(如果燕子触摸被设置为真)

代码语言:javascript
复制
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = [](Touch *touch, Event *event){

    // check if the touch is inside the target
    Vec2 locationInNode = event->getCurrentTarget()->convertToNodeSpace(touch->getLocation());
    Size s = event->getCurrentTarget()->getContentSize();
    Rect rect = Rect(0,0, s.width, s.height);

    if (rect.containsPoint(locationInNode)) {
        printf("listener1");
        return true;
    }

    return false;
};


auto listener2 = EventListenerTouchOneByOne::create();
listener2->setSwallowTouches(true);
listener2->onTouchBegan = [](Touch *touch, Event *event){

    // check if the touch is inside the target
    Vec2 locationInNode = event->getCurrentTarget()->convertToNodeSpace(touch->getLocation());
    Size s = event->getCurrentTarget()->getContentSize();
    Rect rect = Rect(0,0, s.width, s.height);

    if (rect.containsPoint(locationInNode)) {
        printf("listener2");
        return true;
    }

    return false;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29258375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档