cocos2dx遮蔽列表的觸控

魚兒-1226發表於2020-09-25

對於cocos2dx遮蔽列表的觸控的問題,我用一個實戰的粒子來說明一下

 

  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);  
  38.  

上面那段程式碼其實也有很多註釋了,關於觸控式螢幕蔽主要實現3個地方
在CODE上檢視程式碼片派生到我的程式碼片

 

 

  1. listener1->setSwallowTouches(true);//設定禁止想下傳遞觸控    
  2. //以下兩段程式碼二選一  
  3. //第一段是可以自由設定觸控優先順序  
  4. //但是不繫結任何東西  
  5. _eventDispatcher->addEventListenerWithFixedPriority(listener1,-128);  
  6.       
  7. //這一段是設定觸控繫結到精靈,優先順序為預設的0  
  8. //_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,background);  


還有一點值得注意的是,觸控優先順序越低的越先被觸控。相同優先順序的,後新增的先被觸控

相關文章