转自:http://www.jb51.cc/article/p-qtzgdntn-ns.html
如果看过sample中touch的代码,你会发现示例中有一个cc.NODE_TOUCH_CAPTURE_EVENT事件,它和cc.NODE_TOUCH_EVENT触摸事件一样,是引擎级别的事件,我们来看看它和触摸事件的区别。
首先触摸捕获事件默认是开启的,即setTouchCaptureEnabled(true)
触摸捕获事件的优先级要比触摸事件要高,换句话说,触摸捕获事件会比触摸事件先响应,并且有权不分发给触摸事件响应。
对于一个完整的捕获+触摸事件,有这么一个流程:
1.捕获阶段,一旦有触摸事件发生,那么首先会触发捕获事件,并且捕获顺序是从zOrder高到低,越在屏幕上方越优先捕获。从父节点传到子节点,父节点优先捕获。
2.目标阶段,该阶段就是各个节点响应自己的触摸事件,began,moved,ended等。
3传递阶段,只要当前节点没有将触摸吞噬,那么触摸事件将会继续往下层的节点进行传送。
有了一些理论知识,我们来实际操作一下,写些代码,
- @H_404_36@@H_404_36@functionMyScene:ctor()
- @H_404_36@
- @H_404_36@locallayer@H_404_36@=display@H_404_36@.newLayer()
- @H_404_36@self:addChild(layer)
- @H_404_36@layer:setTouchEnabled(true)
- @H_404_36@layer:setTouchSwallowEnabled(false)
- @H_404_36@layer:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)
- @H_404_36@layer:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
- @H_404_36@ifevent.name@H_404_36@=="began"then
- @H_404_36@print("layerbegan")
- @H_404_36@elseifevent.name@H_404_36@=="moved"then
- @H_404_36@print("layermoved")
- @H_404_36@elseifevent.name@H_404_36@=="ended"then
- @H_404_36@print("layerended")
- @H_404_36@end
- @H_404_36@
- @H_404_36@returntrue
- @H_404_36@end)
- @H_404_36@
- @H_404_36@layer:addNodeEventListener(cc.NODE_TOUCH_CAPTURE_EVENT,function(event)
- @H_404_36@ifevent.name@H_404_36@=="began"then
- @H_404_36@print("layercapturebegan")
- @H_404_36@elseifevent.name@H_404_36@=="moved"then
- @H_404_36@print("layercapturemoved")
- @H_404_36@elseifevent.name@H_404_36@=="ended"then
- @H_404_36@print("layercaptureended")
- @H_404_36@end
- @H_404_36@
- @H_404_36@returntrue
- @H_404_36@end)
- @H_404_36@
- @H_404_36@localsp@H_404_36@=display@H_404_36@.newSprite("HelloWorld.png",display.cx,display.cy)
- @H_404_36@layer:addChild(sp)
- @H_404_36@--self:addChild(sp)
- @H_404_36@sp:setTouchEnabled(true)
- @H_404_36@sp:setTouchSwallowEnabled(false)
- @H_404_36@sp:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)
- @H_404_36@sp:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
- @H_404_36@ifevent.name@H_404_36@=="began"then
- @H_404_36@print("spbegan")
- @H_404_36@elseifevent.name@H_404_36@=="moved"then
- @H_404_36@print("spmoved")
- @H_404_36@elseifevent.name@H_404_36@=="ended"then
- @H_404_36@print("spended")
- @H_404_36@end
- @H_404_36@
- @H_404_36@returntrue
- @H_404_36@end)
- @H_404_36@
- @H_404_36@sp:addNodeEventListener(cc.NODE_TOUCH_CAPTURE_EVENT,function(event)
- @H_404_36@ifevent.name@H_404_36@=="began"then
- @H_404_36@print("spcapturebegan")
- @H_404_36@elseifevent.name@H_404_36@=="moved"then
- @H_404_36@print("spcapturemoved")
- @H_404_36@elseifevent.name@H_404_36@=="ended"then
- @H_404_36@print("spcaptureended")
- @H_404_36@end
- @H_404_36@
- @H_404_36@returntrue
- @H_404_36@end)
- @H_404_36@
- @H_404_36@end