-- 创建一个事件监听器 OneByOne为单点触摸
local listener1 = cc.EventListenerTouchOneByOne:create()
-- 设置是否吞没事件,在 onTouchBegan方法返回 true时吞没
listener1:setSwallowTouches(true)
-- EVENT_TOUCH_BEGAN事件回调函数
listener1:registerScriptHandler(touchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
-- EVENT_TOUCH_MOVED事件回调函数
listener1:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED )
-- EVENT_TOUCH_ENDED事件回调函数
listener1:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED )
--获取层的事件派发器
local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
-- 添加监听器
eventDispatcher:addEventListenerWithSceneGraphPriority(listener1, boxA)
local listener2 = listener1:clone()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener2, boxB)
local listener3 = listener1:clone()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener3, boxC)
local function onNodeEvent(event) --注册layer的进入、退出事件用法
if eventType == "enter" then
log("enter")
elseif eventType == "exit" then
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self.schedulerID)
end
end
layerFarm:registerScriptHandler(onNodeEvent)
local function touchBegan(touch, event)
cclog("touchBegan")
-- 获取事件所绑定的 node
local node = event:getCurrentTarget()
-- 获取当前点击点所在相对按钮的位置坐标
local locationInNode = node:convertToNodeSpace(touch:getLocation())
local s = node:getContentSize()
local rect = cc.rect(0, 0, s.width, s.height)
-- 点击范围判断检测
if cc.rectContainsPoint(rect, locationInNode) then
cclog("sprite x = %d, y = %d ", locationInNode.x, locationInNode.y)
cclog("sprite tag = %d", node:getTag())
node:runAction(cc.ScaleBy:create(0.06, 1.06))
return true
end
return false
end
local function touchMoved(touch, event)
cclog("touchMoved")
-- 获取事件所绑定的 node
local node = event:getCurrentTarget()
local currentPosX, currentPosY = node:getPosition()
local diff = touch:getDelta()
-- 移动当前按钮精灵的坐标位置
node:setPosition(cc.p(currentPosX + diff.x, currentPosY + diff.y))
end
local function touchEnded(touch, event)
cclog("touchEnded")
-- 获取事件所绑定的 node
local node = event:getCurrentTarget()
local locationInNode = node:convertToNodeSpace(touch:getLocation())
local s = node:getContentSize()
local rect = cc.rect(0, 0, s.width, s.height)
-- 点击范围判断检测
if cc.rectContainsPoint(rect, locationInNode) then
cclog("sprite x = %f, y = %f ", locationInNode.x, locationInNode.y)
cclog("sprite tag = %d", node:getTag())
node:runAction(cc.ScaleTo:create(0.06, 1.0))
end
end