cocos2dx3.0的触摸优先级和触摸屏蔽问题

用一个实战的例子吧

先贴代码

  1.     auto listener1 = EventListenerTouchOneByOne::create();//创建一个触摸监听    
  2.     listener1->setSwallowTouches(true);//设置不想向下传递触摸  true是不想 默认为false  
  3.       
  4.     listener1->onTouchBegan = [](Touch* touch, Event* event){   
  5.         CCLOG("touch menu");  
  6.         return true;   
  7.     };    
  8.     listener1->onTouchMoved = [](Touch* touch, Event* event){      
  9.     };    
  10.     
  11.     listener1->onTouchEnded = [=](Touch* touch, Event* event){    
  12.     };    
  13.       
  14.     Size visibleSize = Director::getInstance()->getVisibleSize();  
  15.     "white-space:pre">  Point origin = Director::getInstance()->getVisibleOrigin();  
  16. "white-space:pre">  //这里添加了一个MenuItem 用来对比触摸优先级  
  17.     auto continueItem = MenuItemImage::create(  
  18.                                            "ContinueNormal.png",  
  19.                                            "ContinueSelect.png",  
  20.                                            CC_CALLBACK_1(MenuLayer::menuContinueCallback, this));  
  21.       
  22.     continueItem->setPosition(Point(origin.x + visibleSize.width/2  ,  
  23.         origin.y + visibleSize.height/2+continueItem->getContentSize().height));  
  24.   
  25.   
  26.     // 这里添加了一个背景,下面会用到  
  27.     "white-space:pre">  auto background = Sprite::create("background.png");  
  28.     background->setTextureRect(CCRectMake(0, 0, visibleSize.width, visibleSize.height));  
  29.     background->setContentSize(visibleSize);  
  30.     "white-space:pre">  background->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));  
  31.     "white-space:pre">  this->addChild(background, 0);  
  32.   
  33.     "white-space:pre">  auto menu = Menu::create(continueItem, NULL);  
  34.     "white-space:pre">  menu->setPosition(Point::ZERO);  
  35.     "white-space:pre">  this->addChild(menu, 1);  
  36.     _eventDispatcher->addEventListenerWithFixedPriority(listener1,-128); // 重点就是这两行,下面会有详解  
  37.     //_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,background);  



上面那段代码其实也有很多注释了,关于触摸屏蔽主要实现3个地方

  1. listener1->setSwallowTouches(true);//设置禁止想下传递触摸    
  2. //以下两段代码二选一  
  3. //第一段是可以自由设置触摸优先级  
  4. //但是不绑定任何东西  
  5. _eventDispatcher->addEventListenerWithFixedPriority(listener1,-128);  
  6.       
  7. //这一段是设置触摸绑定到精灵,优先级为默认的0  
  8. //_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,background);  



还有一点值得注意的是,触摸优先级越低的越先被触摸。相同优先级的,后添加的先被触摸

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lin&Yi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值