cocos2dx setTouchSwallowEnabled(

2019-10-22  本文已影响0人  沫晚霞光

1. 问题描述

node Anode B两个节点
两个节点都设置了cc.NODE_TOUCH_EVENT事件
B节点的层级比A节点高
并且node B节点设置了吞噬: setTouchSwallowEnabled(true)
点击触发时, 希望只触发node B事件, 吞噬node A事件
结果发现吞噬无效, 两个节点的事件均被触发

local nodeA = ...
nodeA:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
  -- do A stuff
end)
nodeA:setTouchEnabled(true)
nodeA:setTouchSwallowEnabled(true)

local nodeB = ...
nodeB:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
  -- do B stuff
end)
nodeB:setTouchEnabled(true)
nodeB:setTouchSwallowEnabled(true)

2. 问题解决

查阅后发现,需要在node B注册事件函数那里对event.begin返回true才能正确实现吞噬

local nodeB = ...
nodeB:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
  -- 加上这一句
  if event and event.name == "began" then return true end
  -- do B stuff
end)
nodeB:setTouchEnabled(true)
nodeB:setTouchSwallowEnabled(true)

好了, 现在只会触发node B的事件, 而吞噬node A的事件了

上一篇 下一篇

猜你喜欢

热点阅读