触摸bug,有代码,求关注,求解决

版本:cocos2d-x-3.3rc0
情况:创建两个带触摸的sprite,当我点中一个不放手,在点另外一个,另外一个也会响应触摸事件,
设备:ipad 2

求关注,求解答 谢谢



    
    Sprite * sprite1 = Sprite::create("button_close.png");
    this->addChild(sprite1);
    sprite1->setPosition(200,300);
    Sprite * sprite2 = Sprite::create("button_close.png");
    this->addChild(sprite2);
    sprite1->setPosition(400,300);

        auto listener = EventListenerTouchOneByOne::create();
        listener->setSwallowTouches(true);
        
        listener->onTouchBegan = =](Touch* touch, Event* event){
            auto target = static_cast<Sprite*>(event->getCurrentTarget());
            
            Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
            Size s = target->getContentSize();
            Rect rect = Rect(0, 0, s.width, s.height);
            
            if (rect.containsPoint(locationInNode))
            {
                CCLOG("onTouchBegan");
                return true;
            }
            return false;
        };
        
        listener->onTouchEnded = =](Touch* touch, Event* event){
            auto target = static_cast<Sprite*>(event->getCurrentTarget());
            target->stopAllActions();
            ScaleTo * sb1 = ScaleTo::create(0.1f, scale*1.0);
            target->runAction(sb1);
            
            Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
            Size s = target->getContentSize();
            Rect rect = Rect(0, 0, s.width, s.height);
            
            if (rect.containsPoint(locationInNode))
            {
                
                CCLOG("onTouchEnded");
            }
            
        };

        _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, sprite1);
        _eventDispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), sprite1);


自己顶一个 求关注 求解决

这个问题好像一直都,想过两种方式解决:
1、自己在触摸事件里判断当前是否上一次触摸结束了;
2、修改android或ios的native代码,从源头禁止多点触摸

谢谢您的回复,
有没有简单一点的方式可以解决这个问题

有2个listener,2个Sprite单独接受处理自己的触摸事件,有什么问题吗?

本身是没有问题的,
但是在同一Layer 或者 node 上有两个可以触摸的Sprite,那么当我按住一个Sprite,在点击另外一个Sprite 还是可以接受触摸事件,理论上是单点触摸,那么我按住一个Sprite没放手,那么另外一个是不能点击才对啊.

用一个开关. 表示当前是否点击了其中一个. 按钮时间结束的时候关闭这个开关.
当有新的点击事件被收到用开关过滤这一次点击.

— Begin quote from ____

引用第5楼z104207于2014-12-10 11:23发表的 回 4楼(偶尔e网事) 的帖子 :
本身是没有问题的,
但是在同一Layer 或者 node 上有两个可以触摸的Sprite,那么当我按住一个Sprite,在点击另外一个Sprite 还是可以接受触摸事件,理论上是单点触摸,那么我按住一个Sprite没放手,那么另外一个是不能点击才对啊. http://www.cocoachina.com/bbs/job.php?action=topost&tid=274469&pid=1194696

— End quote

那你是不是要考虑把事件监听注册到层上面,而不是Sprite上面?

如果我吧事件注册到层上面,那和Menu就没有什么区别,这样做只会增加复杂度,
既然使用的EventListenerTouchOneByOne 那么它就应该负责这样的功能,不然EventListenerTouchOneByOne和EventListenerTouchAllAtOnce本质的区别就不是很大了

有点忘了。没记错的话,这个EventListenerTouchOneByOne是指对你attach的节点只有一个响应。因为你对每一个Sprite都这样设置了,所以每一个节点都接受一个响应。而不是针对整个屏幕而言的。

首先谢谢版主的回复,大概了解你们的设计思路了,我所理解的和你们的设计有些出入,我还是想想其他办法来规避这个问题