之前在网上搜到有人对于这个方法的解释是这样的:
// true不向下触摸,简单点来说,比如有两个sprite ,A和 B,A在上B在下(位置重叠),触摸A的时候,B不会受到影响,反之false,向下传递触摸,触摸A也等于触摸了B
于是我写了一下代码,建了三个精灵,sprite1在sprite2上面,测试点击sprite1,会不会出发sprite2的事件,sprite3用于测试前两个精灵的点击事件。
问题:无论设置时true还是false,结果sprite1 和sprite2 的事件都触发了,咋回事呢,求大神
bool TouchLayer::init()
{
if (!Layer::init())
{
return false;
}
auto visibleSize = Director::getInstance()->getVisibleSize();
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(false);
auto sprite2 = Sprite::create("turtle.png");
sprite2->setPosition(Vec2(visibleSize.width/4,visibleSize.height/4));
this->addChild(sprite2,0);
auto sprite1 = Sprite::create("snail.png");
sprite1->setPosition(Vec2(visibleSize.width/4,visibleSize.height/4));
this->addChild(sprite1,1);
auto sprite3 = Sprite::create("lobster.png");
sprite3->setPosition(Vec2(visibleSize.width/4,visibleSize.height*3/4));
this->addChild(sprite3);
listener->onTouchBegan = =](Touch* _touch,Event* _event){
auto touchSpritePoint = convertTouchToNodeSpace(_touch);
if (sprite1->boundingBox().containsPoint(touchSpritePoint))
{
auto actionMoveBySprite = MoveBy::create(1.0f,Vec2(100,0));
sprite3->runAction(actionMoveBySprite);
}
if (sprite2->boundingBox().containsPoint(touchSpritePoint))
{
auto actionRotateBySprite = RotateBy::create(1.0f,180);
sprite3->runAction(actionRotateBySprite);
}
return true;
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,sprite1);
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener->clone(),sprite2);
return true;
}
```
小弟最近在学习cocos2d 3.0中的触摸事件,遇到一个关于setSwallowTouches(true) 用法的问题
