Skip to content

Instantly share code, notes, and snippets.

@coldfog
Last active August 29, 2015 14:16
Show Gist options
  • Save coldfog/0701fb808bd7d65902e3 to your computer and use it in GitHub Desktop.
Save coldfog/0701fb808bd7d65902e3 to your computer and use it in GitHub Desktop.
MixTouchAdapter for quick-cocos2d-x touch system and cocos2d-x touch system
--[[
This is an adapter for quick-cocos2d-x touch system and cocos2d-x touch system
Usage: invoke adapt method
adapt(target, withModal)
target: Mixed. the quick obj to adjust
withModal: boolean. If swallow all touch event
-- qucik touch object
local quickTouchObj = cc.ui.UIPushButton()
-- cocos2dx touch scene
local scene = cc.Scene:create()
scene:addChild(quickTouchObj)
require("MixTouchAdapter").adapt(quickTouchObj, false)
--]]
local MixTouchAdapter = {}
local function _convertToTouchEvent(touch, name)
local loc = touch:getLocation()
local prevLoc = touch:getPreviousLocation()
local event = {}
event.mode = 1
event.name = name
event.x = loc.x
event.y = loc.y
event.prevX = prevLoc.x
event.prevY = prevLoc.y
return event
end
local function _dispatchToChildren(target, idx, event, withModal)
if target.EventDispatcher and target:isVisible() then
target:EventDispatcher(idx, event)
end
local ok, children = pcall(target.getChildren, target)
if ok then
for k, v in pairs(children) do
_dispatchToChildren(v,idx,event, withModal)
end
end
end
function MixTouchAdapter.adapt(target, withModal)
target.touchEventListener = cc.EventListenerTouchOneByOne:create()
target.touchEventListener:setSwallowTouches(withModal)
target.touchEventListener:registerScriptHandler(function(touch, event)
local event = _convertToTouchEvent(touch,"began")
_dispatchToChildren(target, 2, event)
return true
end,cc.Handler.EVENT_TOUCH_BEGAN )
target.touchEventListener:registerScriptHandler(function(touch, event)
local event = _convertToTouchEvent(touch,"moved")
_dispatchToChildren(target, 2, event)
end,cc.Handler.EVENT_TOUCH_MOVED)
target.touchEventListener:registerScriptHandler(function(touch, event)
local event = _convertToTouchEvent(touch,"ended")
_dispatchToChildren(target, 2, event)
end,cc.Handler.EVENT_TOUCH_ENDED)
local eventDispatcher = target:getEventDispatcher()
eventDispatcher:addEventListenerWithFixedPriority(target.touchEventListener, -1)
target:addNodeEventListener(cc.NODE_EVENT, function(event)
print("remove will be called")
if event.name == "exit" then
local eventDispatcher = target:getEventDispatcher()
eventDispatcher:removeEventListener(target.touchEventListener)
end
end)
end
return MixTouchAdapter
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment