Cocos2D-JS 中触摸事件的吞没和向“下”传递

触摸事件的吞没

当给一个 Node 对象加入一个触摸 EventListener 时,要想让这个 Node 吞没这个事件,不再向“下”传递,要设置两个地方。
第一,要设置

swallowTouches = true;

第二,要在触摸事件的 onTouchBegan 回调中返回 true :

onTouchBegan : function(touch, event){
   //function body
    return true;
}

如果没有这两个设置,这个 Node 就不会吞没这个触摸事件,尤其是第二个,容易被忽略。

触摸事件的向下传递

网上的资料在介绍 Cocos2D 触摸事件的吞没时,都说不再向“下”传递,那这个“下”究竟是怎么样的顺序呢?也就是说一个 Node 的对象,在触摸事件的传递中,它的“下”是谁?

Cocos2D 在传递触摸事件时有一个类似于“传递链”之类的东西。我们假设所有的 Node 都可以响应触摸事件并且不吞没。那么当一个 Node 收到触摸事件调用了自己的回调之后,要把这个触摸事件传递给位于这个“传递链”的下一个 Node 中,这个传递顺序是和响应的优先级以及 Node 之间的父子关系有关的。

我们在给一个 Node 加入一个触摸响应的时候一般会使用一个优先级参数:

cc.eventManager.addListener(listener, nodeOrPriority);

而大多数时候,都使用 Node 的现实优先级来设置这个响应的优先级。位于同一个 Node 下的子 Node ,优先级最高的首先收到触摸事件,然后,它将这个触摸事件传递给优先级比自己小的 Node 中优先级最大的那个,依此类推,当传递链中没有兄弟 Node 后,这个事件便传递给了它们的父级 Node ,依此类推……

下面是一个此传递链的图,看图比较直观:

Cocos2d触摸事件响应链.png

图中红色数组和箭头显示了触摸事件的传递顺序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 57,876评论 51 603
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,098评论 4 26
  • 在开发过程中,大家或多或少的都会碰到令人头疼的手势冲突问题,正好前两天碰到一个类似的bug,于是借着这个机会了解了...
    闫仕伟阅读 5,391评论 2 23
  • 本文来自:http://ios.jobbole.com/84081/ 前言: 按照时间顺序,事件的生命周期是这样的...
    HackerOnce阅读 2,858评论 1 10
  • 一、const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们...
    nero_i阅读 359评论 0 0