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,891評論 51 603
  • 在iOS開發中經常會涉及到觸摸事件。本想自己總結一下,但是遇到了這篇文章,感覺總結的已經很到位,特此轉載。作者:L...
    WQ_UESTC閱讀 6,106評論 4 26
  • 在開發過程中,大家或多或少的都會碰到令人頭疼的手勢沖突問題,正好前兩天碰到一個類似的bug,于是借著這個機會了解了...
    閆仕偉閱讀 5,395評論 2 23
  • 本文來自:http://ios.jobbole.com/84081/ 前言: 按照時間順序,事件的生命周期是這樣的...
    HackerOnce閱讀 2,858評論 1 10
  • 一、const與宏的區別: const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏,推薦我們...
    nero_i閱讀 359評論 0 0