Cocos2dx Lua 關於Touch事件傳遞阻止下層傳遞的問題
阿新 • • 發佈:2019-01-22
在遊戲開發中,經常會碰到在一個介面彈出類似於彈窗類的控制元件,這時需要將下層的點選遮蔽掉,之前的做法是將下層的touch事件都管理起來,彈窗關閉時再將其touc開啟,
今天探索發現一個更簡潔快速的方法,將彈窗層的TouchPriority註冊為小於最大優先順序,再將彈窗層上的按鈕的優先順序設定為TouchPriority-1,使按鈕的優先順序比彈窗層的優先順序高,這樣就造成三個級別的層,最下面為下層需要遮蔽的層,中間層為彈窗層,最上層為按鈕層,此時優先順序為按鈕層>彈窗層>遮蔽層。
程式碼示例:
LayerTouchPriority = -129 --彈窗層的優先順序<大於最大優先順序>
--設定彈窗層的優先順序<handle,是否多點觸控,優先順序,是否吞噬下層touch><began方法裡必須返回true>
layer:registerScriptTouchHandler(function(eventType) if eventType == "began" then return true end end, false, LayerTouchPriority, true)
layer:setTouchEnabled(true)
--再將按鈕的優先順序設定為大於彈窗層的優先順序
button:setTouchPriority(LayerTouchPriority - 1)