Cocos2d-x 3.x 层触摸优先级及屏蔽

来源:互联网 发布:win制作mac安装u盘 编辑:程序博客网 时间:2024/05/22 23:04

2.x版本一般是以下方法设置

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetDelegate(this, priority, true);

对象销毁的时候还需要执行下面的代码

CCDirector::sharedDirector()->removeDelegate(this);

3.x版本的触摸点击事件较之2.x版本有了很大的改动,直接与层的Z-Order相关,不需要再设优先级priority,Z-Order越大,则越先触发,越小则越晚触发。

//层 1auto Layer1 = Layer::create();addChild(Layer1, 10);auto listener1 = EventListenerTouchOneByOne::create();listener1->onTouchBegan = [this](Touch *touch, Event *event){    log("touch layer 1");    return true; };Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener1, Layer1);//层 2auto Layer2 = Layer::create();addChild(Layer2, 5);auto listener2 = EventListenerTouchOneByOne::create();listener2->onTouchBegan = [this](Touch *touch, Event *event){    log("touch layer 2");    return true;};Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener2, Layer2);

最后的输出是

touch layer 1touch layer 2

如果想吞噬掉点击事件,不让它传递到下一层,就需要改成下面的代码

auto listener1 = EventListenerTouchOneByOne::create();//这里设为truelistener1->setSwallowTouches(true);listener1->onTouchBegan = [this](Touch *touch, Event *event){    log("touch layer 1");    return true; };

然后发现了一个问题,如果onTouchBegan返回的是false的话,即便是 setSwallowTouches(true) ,也不能吞噬掉点击,还是能点到下面的层。这个还没搞懂是为什么。

0 0
原创粉丝点击