博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x学习笔记番外篇05:如何快速屏蔽触摸
阅读量:4110 次
发布时间:2019-05-25

本文共 1869 字,大约阅读时间需要 6 分钟。

cocos2d-x有个问题,即使暂停CCScene运行,触摸仍然有效,有些菜单和按钮仍然会被触发。

所以有的时候我们要手动屏蔽触摸,尤其是在弹出计费画面的,或者使用一些本平台自带控件的时候。

做法有几种:

第一种方案是:每一个继承自CCLayer的类都可以关闭触摸,使用这个函数

setIsTouchEnabled(false); 

在暂停sence时,我们只需要关闭那些主要的CCLayer即可,也就是当前CCScene的主CCLayer和相关的CCMenu等。

但这种方法,有时候会造成莫名其妙的crash。调试发现,如果在同一个frame的同一个函数中,先关闭再恢复触摸,就可能造成crash。crash的原因是引擎在派发触摸事件时,发现响应对象的列表为空,直接触发断言。

第二种方案是:写一个CCLayer,把所有优先级调至最高,并直接覆盖到当前CCSence主CCLayer上。

经过试验,这种方式非常简单有效,重用性也很高。

class NoTouchLayer : public cocos2d::CCLayer{  
public: 
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone 
virtual bool init();   
     
    // implement the "static node()" method manually 
    LAYER_NODE_FUNC(NoTouchLayer); 
     
    virtualvoid registerWithTouchDispatcher(); 
     
    virtualbool ccTouchBegan (cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); 
    virtualvoid ccTouchMoved (cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); 
    virtualvoid ccTouchEnded (cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); 
     
}; 

bool NoTouchLayer::init(){   
    if (!CCLayer::init() )  
    {  
    return false;  
    }  
      
    setIsTouchEnabled(true);  
      
    return true;  
}  
   
void NoTouchLayer::registerWithTouchDispatcher(){  
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, numeric_limits 
 ::min() , true);//使用int最小值做最高优先级,并且吞掉事件true  
    CCLayer::registerWithTouchDispatcher();  
}  
   
bool NoTouchLayer::ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent){     
    return true;  
}  
   
void NoTouchLayer::ccTouchMoved (CCTouch *pTouch, CCEvent *pEvent){  
  
  
}  
  
  
void NoTouchLayer::ccTouchEnded (CCTouch *pTouch, CCEvent *pEvent){  
  
  
}  

这个类的使用也很简单,直接addChild,removeChild即可。注意清理,注意addChild的时候要给一个足够大的z轴深度值。

转载地址:http://hiosi.baihongyu.com/

你可能感兴趣的文章
(正则表达式)表单验证
查看>>
在JS中 onclick="save();return false;"return false是
查看>>
VS编译器运行后闪退,处理方法
查看>>
用div+css做下拉菜单,当鼠标移向2级菜单时,为什么1级菜单的a:hover背景色就不管用了?
查看>>
idea 有时提示找不到类或者符号
查看>>
ng-class的几种用法
查看>>
matplotlib.pyplot.plot()参数详解
查看>>
拉格朗日对偶问题详解
查看>>
MFC矩阵运算
查看>>
最小二乘法拟合:原理,python源码,C++源码
查看>>
ubuntu 安装mysql
查看>>
c# 计算器
查看>>
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输入文件流ifstream用法详解
查看>>
c++输出文件流ofstream用法详解
查看>>
字符编码:ASCII,Unicode 和 UTF-8
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>