本文针对版本:2.2.1rc版或者之前的版本,最新2.2.3版本廖大对触摸做了不少改动,具体的触摸改动可以查看samples里的touch测试例子
刚开始接触quick,在用的过程中,对于触摸以及吞噬的使用有些问题。在浏览谷歌邮件组的时候,发现廖大对quick的触摸事件流作了一些说明。
保留了 cocos2dx 已有的触摸事件处理机制,扩展了:
- 任意 Node 都可以响应触摸事件,并且按照该 Node 及其所有子 Node 占用的屏幕空间来判断触摸响应区域;
- 按照 Node 的渲染次序来响应触摸,也就是说最上层的 Node 最先响应触摸,用来制作对话框就很方便了。
- 在 Lua 框架里提供了多种按钮类型。
###注意###
- cocos2d-x 的触摸是基于 CCLayer 的。而 CCLayer 按照优先级来响应触摸。
- quick 的触摸是基于显示层级的。
###2014/1/14更新###
####版本:QuickCocos2dX 2.2.1rc
举个例子:)
模态层示例| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 
 | local leftMenu = cc.ui.UIPushButton.new("somePic.png")
 :onButtonPressed(function(event)
 print("left menu pressed")
 end)
 :onButtonRelease(function(event)
 print("left menu release")
 end)
 :onButtonClicked(function(event)
 print("left menu clicked")
 end)
 :align(display.CENTER, display.cx - 100, display.cy)
 :addTo(self)
 
 
 local poplayer = display.newSprite():addTo(self)
 poplayer:setCascadeBoundingBox(CCRectMake(0, 0, display.width, display.height))
 poplayer:setTouchEnabled(true)
 poplayer:addTouchEventListener(function(event, x, y)
 if event == "began" then
 return true
 elseif event == "ended" then
 print("pop layer touch ended......")
 end
 
 end)
 
 
 local rightMenu = cc.ui.UIPushButton.new("somePic.png")
 :onButtonPressed(function(event)
 print("right menu pressed")
 end)
 :onButtonRelease(function(event)
 print("right menu release")
 end)
 :onButtonClicked(function(event)
 print("right menu clicked")
 end)
 :align(display.CENTER, display.cx + 100, display.cy)
 :addTo(poplayer)
 
 | 
 
可以将上面代码拷贝到工程中进行测试,将图片somePic.png换成你自己的按钮图片,测试发现,leftMenu位于poplayer之下,触摸是不响应的,poplayer中的rightMenu能够响应。