Cocos2d + lua 触摸机制

项目中有这样一个面板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个参数,用于回调的函数,是否接受多点触摸,优先级,是否吞并。


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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值