addEventListenerWithSceneGraphPriority函数和addEventListenerWithFixedPriorit函数,我的理解是前者是把监听加到具体的node上,而后者就不太理解了,不清楚到底是给有固定优先级的node加监听,还是给监听事件加优先级,或者其他的意思。两者使用是可以同时使用,还是只能选择一个使用,各有什么优点,求解..................拜谢、
addEventListenerWithSceneGraphPriority函数和addEventListenerWithFixedPriorit函数,我的理解是前者是把监听加到具体的node上,而后者就不太理解了,不清楚到底是给有固定优先级的node加监听,还是给监听事件加优先级,或者其他的意思。两者使用是可以同时使用,还是只能选择一个使用,各有什么优点,求解..................拜谢、
addEventListenerWithFixedPriorit是把固定优先值的监听器添加到一个node
addEventListenerWithSceneGraphPriority函数和addEventListenerWithFixedPriority函数会在添加事件监听器时设置一个已注册标识,一旦设置了标识,就不能再用于注册事件监听了 后者在node移除时手动移除监听器 而前者是随着节点的析构被移除 至于什么时候要用哪个需要具体分析
前者事件派发优先级是根据绑定的节点的Z序来决定
而后者适用于自定义优先级 这就看需求来决定了。
addEventListenerWithFixedPriority这个需要手动删除,优先级从1开始
addEventListenerWithSceneGraphPriority这个的优先级是0
addEventListenerWithFixedPriorit 可以自己为节点设置优先级 下面是我的例子
local layer = cc.Layer:create()
local sprite1 = cc.Sprite:create("icon_life.png")
sprite1:setPosition(100,160)
layer:addChild(sprite1)
local sprite2 = cc.Sprite:create("icon_life.png")
sprite2:setPosition(220,160)
layer:addChild(sprite2)
local sprite3 = cc.Sprite:create("icon_life.png")
sprite3:setPosition(340,160)
layer:addChild(sprite3)
local function onTouchBegan1(touch,event)
local location = sprite1:convertToNodeSpace(touch:getLocation())
local s = sprite1:getContentSize()
local rect = cc.rect(0,0,s.width,s.height)
if cc.rectContainsPoint(rect,location) then
print("sprite1 was clicked")
end
return true
end
local function onTouchBegan2(touch,event)
local location = sprite2:convertToNodeSpace(touch:getLocation())
local s = sprite2:getContentSize()
local rect = cc.rect(0,0,s.width,s.height)
if cc.rectContainsPoint(rect,location) then
print("sprite2 was clicked")
end
return true
end
local function onTouchBegan3(touch,event)
local location = sprite3:convertToNodeSpace(touch:getLocation())
local s = sprite3:getContentSize()
local rect = cc.rect(0,0,s.width,s.height)
if cc.rectContainsPoint(rect,location) then
print("sprite3 was clicked")
end
return true
end
local listener1 = cc.EventListenerTouchOneByOne:create()
local listener2 = cc.EventListenerTouchOneByOne:create()
local listener3 = cc.EventListenerTouchOneByOne:create()
listener1:registerScriptHandler(onTouchBegan1,cc.Handler.EVENT_TOUCH_BEGAN)
listener2:registerScriptHandler(onTouchBegan2,cc.Handler.EVENT_TOUCH_BEGAN)
listener3:registerScriptHandler(onTouchBegan3,cc.Handler.EVENT_TOUCH_BEGAN)
local dispatcher = layer:getEventDispatcher()
dispatcher:addEventListenerWithFixedPriority(listener1,-1)
dispatcher:addEventListenerWithFixedPriority(listener2,-2)
dispatcher:addEventListenerWithFixedPriority(listener3,-3)
local function onExit()
dispatcher:removeAllEventListeners()
end
local function onNodeEvent(event)
if "exit" == event then
onExit()
end
end
layer:registerScriptHandler(onNodeEvent)
return layer