Cocos2d + lua 触摸机制

来源:互联网 发布:淘宝最好的沉香卖家 编辑:程序博客网 时间:2024/06/13 23:04

项目中有这样一个面板Main,里面有两个页签Tab1和Tab2,通过点击页签来切换对应的Layer1和Layer2,不显示的Layer执行setPosition(ccp(999999,0))和setVisible(false),显示的Layer执行setPosition(ccp(0,0))和setVisible(true),其中Layer2设置了触摸机制,代码如下:

self.bgLayer=CCLayer:create()

local function tmpHandler(...)
        return self:touchEvent(...)

end

self.bgLayer:registerScriptTouchHandler(tmpHandler,false,-(self.layerNum-1)*20-3,false)

self.bgLayer:setTouchPriority(-(self.layerNum-1)*20-3)

self.bgLayer:setTouchEnabled(true)

self.bgLayer:setBSwallowsTouches(false)

现在的问题是显示Layer2后再切回Layer1的显示的话,点击Layer1会触发Layer2的触摸事件。

通过查询资料才知道:

CCLayer无论是隐藏还是显示都会收到触摸消息,如果希望窗口(一个CCLayer)在显示的时候才收到触摸,那么可以在began的时候返回isVisible()。

问题解决了,现在让我们整理一下cocos2dx的触摸机制

  • 触摸消息类型
     触摸有开始(ccTouchBegan)、移动(ccTouchMoved)、结束(ccTouchEnded)、取消 (ccTouchCancelled)类型的消息。一个点击动作会有以下消息顺序:began->ended。cancel只有在手机上按到 home键或者有电话的情况下才会触发。
代码示例如下:(在began的时候返回true或1,后续才会收到end、move和cancel。)
function MainTab2:touchEvent(fn,x,y,touch)
    if fn=="began" then--开始
    elseif fn=="moved" then--移动
    elseif fn=="ended" then--结束
    else--取消
    end
end
  • setTouchEnabled(true)注册完触摸事件后如果setTouchEnabled(true)则触摸事件生效,否则触摸没有响应。
  • CCLayer::registerScriptTouchHandler()一共有4个参数,用于回调的函数,是否接受多点触摸,优先级,是否吞并。


    ~~~~~~~~有时间看下底层逻辑~~~~~~~~







0 0
原创粉丝点击