2dx-lua精灵添加触摸事件
来源:互联网 发布:js防水涂料是柔性的吗 编辑:程序博客网 时间:2024/05/01 03:00
-----1.直接上代码:
local sprite = cc.Sprite:create("rabbit.png")
sprite:setPosition(500, 500)
self:addChild(sprite)
local listener = cc.EventListenerTouchOneByOne:create()
local function onTouchBegan(touch, event)
local target = event:getCurrentTarget()
local size = target:getContentSize()
local rect = cc.rect(0, 0, size.width, size.height)
local p = touch:getLocation()
p = target:convertTouchToNodeSpace(touch)
if cc.rectContainsPoint(rect, p) then
return true
end
return false
end
local function onTouchMoved(touch, event) end
local function onTouchEnded(touch, event)
print("触摸事件")
end
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, sprite)
-----2.不过这样有一个问题,当精灵放在滚动层里的时候,滚动层不显示的部分也会接受到触摸事件,解决方法:
获取滚动层,然后加上滚动层的区域判断
local function onTouchBegan(touch, event)
local target = event:getCurrentTarget()
local size = target:getContentSize()
local rect = cc.rect(0, 0, size.width, size.height)
local p = target:convertTouchToNodeSpace(touch)
--[[scroll之外不触发事件]]
local scrollTouch = true
if scroll then
local size1 = scroll:getContentSize()
local rect1 = cc.rect(0, 0, size1.width, size1.height)
local p1 = scroll:convertTouchToNodeSpace(touch)
if not cc.rectContainsPoint(rect1, p1) then
scrollTouch = false
end
end
if cc.rectContainsPoint(rect, p) and listTouch then
return true
end
return false
end
-----3.最后来说下滚动层中精灵触摸的问题,因为滚动的时候是不希望精灵触发点击事件的,直接上代码:
self.touchLock = false
self.offset = 5 --[[允许便宜量]]
self.isMove = true --[[移动时是否触发点击事件]]
--[[按钮事件]]
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(false)
local function onTouchBegan(touch, event)
self.touchLock = false
local target = event:getCurrentTarget()
local size = target:getContentSize()
local rect = cc.rect(0, 0, size.width, size.height)
local p = target:convertTouchToNodeSpace(touch)
--[[scroll之外不触发事件]]
local scrollTouch = true
if scroll then
local size1 = scroll:getContentSize()
local rect1 = cc.rect(0, 0, size1.width, size1.height)
local p1 = scroll:convertTouchToNodeSpace(touch)
if not cc.rectContainsPoint(rect1, p1) then
scrollTouch = false
end
end
if cc.rectContainsPoint(rect, p) and scrollTouch then
return true
end
return false
end
local function onTouchMoved(touch, event)
if self.isMove then
local offX = math.abs(touch:getStartLocation().x - touch:getLocation().x)
local offY = math.abs(touch:getStartLocation().y - touch:getLocation().y)
if offX > self.offset or offY > self.offset then
self.touchLock = true
end
end
end
local function onTouchEnded(touch, event)
if not self.touchLock then
print("点击事件")
end
end
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, self.confirmBtn_)
- 2dx-lua精灵添加触摸事件
- 为精灵添加触摸事件
- 2dx-lua精灵置灰
- cocos2d-x 精灵触摸事件
- cocos2dx 精灵监听触摸事件
- cocos2dx 处理精灵触摸事件
- lua触摸事件
- cocos2d-lua 触摸事件
- 【coocs2d-x 3.5】Lua 精灵触摸
- android添加触摸事件
- 精灵(CCSprite)自定义触摸事件
- 让一个精灵接受触摸事件
- cocos lua 3.0 触摸事件
- quick-lua touch 触摸事件
- cocos2d-x lua 触摸事件
- Cocos2d-x Lua 触摸事件
- cocos lua 注册触摸事件
- Cocos2dx-lua触摸事件处理
- C++ typedef用法小结
- GDOI2016总结
- recycleview滑动到底部自动加载更多数据
- numeric_cast
- html第一天div页面布局
- 2dx-lua精灵添加触摸事件
- Javascript学习笔记(10)
- 批量更名
- 积分变换测试记录
- 键盘上的回车按钮点击事件的个数问题
- 【COCI2015】【BZOJ3810】Stanovi
- java线程深度解析(一)——java new 接口?匿名内部类给你答案
- 【转】百度api查询天气
- 技术入股的那些坑