zoukankan      html  css  js  c++  java
  • 如何快速屏蔽触摸

    cocos2d-x有个问题,即使暂停CCScene运行,触摸仍然有效,有些菜单和按钮仍然会被触发。所以有的时候我们要手动屏蔽触摸,尤其是在弹出计费画面的,或者使用一些本平台自带控件的时候。

    做法有几种:

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

    setTouchEnabled(false);

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

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

    第二种方案是:写一个CCLayer,把所有优先级调至最高,并直接覆盖到当前CCSence主CCLayer上。经过试验,这种方式非常简单有效,重用性也很高。

    实现这一方案的关键主要在于两个函数:

    第一,重写ccTouchBegan

    1. bool NoTouchLayer::ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent){     
    2.     return true;  
    3. }  

    第二、重写registerWithTouchDispatcher

    1. void NoTouchLayer::registerWithTouchDispatcher(){  
    2.     CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, numeric_limits <int> ::min() , true);//使用int最小值做最高优先级,并且吞掉事件true
    3.     CCLayer::registerWithTouchDispatcher();  
    4. }  

    假如在这个layer里,还有


    参考文章:http://4137613.blog.51cto.com/4127613/845269

  • 相关阅读:
    css样式表中的样式覆盖顺序(转)
    1.2 明确你的 前端学习路线 和 方法
    1.1 开篇:重新理解前端
    3_1:语言基础:原始值 与 引用值
    2_5:语言基础:语句
    2_4:语言基础:操作符
    2_3:语言基础:数据类型
    2_2:语言基础:变量
    2_1:语言基础:语法
    1_2 HTML中的JavaScript
  • 原文地址:https://www.cnblogs.com/yssgyw/p/3343640.html
Copyright © 2011-2022 走看看