关于触摸事件的问题


layer上有三个sprite,想让点到那个sprite就让它做一个动作,不知道为什么不管点哪里得到的都是tag=213的这个sprite?

        bool HelloWorld::init()
        {
        	if (!Layer::init())
        	{
        		return false;
        	}
        	auto sprite1 = Sprite::create("sprite1.png");
        	sprite1->setPosition(Vec2(100,100));
        	this->addChild(sprite1);
        	sprite1->setTag(123);

        	auto sprite2 = Sprite::create("sprite2.png");
        	sprite2->setPosition(Vec2(400, 200));
        	this->addChild(sprite2);
        	sprite2->setTag(321);

        	auto sprite3 = Sprite::create("sprite3.png");
        	sprite3->setPosition(Vec2(700, 300));
        	this->addChild(sprite3);
        	sprite3->setTag(213);

        	auto listen1 = EventListenerTouchOneByOne::create();
        	listen1->setSwallowTouches(true);
        	listen1->onTouchBegan = [](Touch* touch, Event* event)
                {
        		auto target = static_cast<Sprite*>(event->getCurrentTarget());
        		int tag = target->getTag();
        		if (target->getBoundingBox().containsPoint(touch->getLocation()))
        		{
        			auto moveto = MoveBy::create(1, Vec2(100,100));
        			auto reverse = moveto->reverse();
        			target->runAction(Sequence::create(moveto,reverse,nullptr));
        		}

        		return true;
        	};

        	_eventDispatcher->addEventListenerWithSceneGraphPriority(listen1, sprite1);
        	_eventDispatcher->addEventListenerWithSceneGraphPriority(listen1->clone(), sprite2);
        	_eventDispatcher->addEventListenerWithSceneGraphPriority(listen1->clone(), sprite3);

            return true;
        }

找到原因了,if的结束必须得有个return true,然后 return false,如图。这又是为什么呢?

onTouchBegan不能老返回true呀,如果判断到没有containsPoint,就return false