Last active
August 29, 2015 14:16
-
-
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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
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