觸摸事件的吞沒
當(dāng)給一個(gè) Node 對(duì)象加入一個(gè)觸摸 EventListener 時(shí)炮沐,要想讓這個(gè) Node 吞沒這個(gè)事件回怜,不再向“下”傳遞换薄,要設(shè)置兩個(gè)地方。
第一轻要,要設(shè)置
swallowTouches = true;
第二垦缅,要在觸摸事件的 onTouchBegan 回調(diào)中返回 true :
onTouchBegan : function(touch, event){
//function body
return true;
}
如果沒有這兩個(gè)設(shè)置冲泥,這個(gè) Node 就不會(huì)吞沒這個(gè)觸摸事件壁涎,尤其是第二個(gè),容易被忽略怔球。
觸摸事件的向下傳遞
網(wǎng)上的資料在介紹 Cocos2D 觸摸事件的吞沒時(shí),都說不再向“下”傳遞竟坛,那這個(gè)“下”究竟是怎么樣的順序呢?也就是說一個(gè) Node 的對(duì)象担汤,在觸摸事件的傳遞中,它的“下”是誰漫试?
Cocos2D 在傳遞觸摸事件時(shí)有一個(gè)類似于“傳遞鏈”之類的東西。我們假設(shè)所有的 Node 都可以響應(yīng)觸摸事件并且不吞沒外构。那么當(dāng)一個(gè) Node 收到觸摸事件調(diào)用了自己的回調(diào)之后,要把這個(gè)觸摸事件傳遞給位于這個(gè)“傳遞鏈”的下一個(gè) Node 中审编,這個(gè)傳遞順序是和響應(yīng)的優(yōu)先級(jí)以及 Node 之間的父子關(guān)系有關(guān)的歧匈。
我們?cè)诮o一個(gè) Node 加入一個(gè)觸摸響應(yīng)的時(shí)候一般會(huì)使用一個(gè)優(yōu)先級(jí)參數(shù):
cc.eventManager.addListener(listener, nodeOrPriority);
而大多數(shù)時(shí)候垒酬,都使用 Node 的現(xiàn)實(shí)優(yōu)先級(jí)來設(shè)置這個(gè)響應(yīng)的優(yōu)先級(jí)件炉。位于同一個(gè) Node 下的子 Node ,優(yōu)先級(jí)最高的首先收到觸摸事件斟冕,然后,它將這個(gè)觸摸事件傳遞給優(yōu)先級(jí)比自己小的 Node 中優(yōu)先級(jí)最大的那個(gè)磕蛇,依此類推十办,當(dāng)傳遞鏈中沒有兄弟 Node 后超棺,這個(gè)事件便傳遞給了它們的父級(jí) Node 向族,依此類推……
下面是一個(gè)此傳遞鏈的圖棠绘,看圖比較直觀:
圖中紅色數(shù)組和箭頭顯示了觸摸事件的傳遞順序。