在cocos lua 中,我们实现按钮的监听事件一般这样使用

local function btnOnClick( sender, eventType )
    
end
btn:addTouchEventListener(btnOnClick)

eventType有四种:

  • TOUCH_EVENT_BEGAN         --触摸开始
  • TOUCH_EVENT_MOVED        --触摸移动
  • TOUCH_EVENT_ENDED         --触摸结束
  • TOUCH_EVENT_CANCELED  --触摸取消

而想要获取按钮触摸的点坐标,之前一直以为要使用最基础的触摸实现

    local listener = cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(onTouchBegin,cc.Handler.EVENT_TOUCH_BEGAN )
    listener:registerScriptHandler(onTouchMove,cc.Handler.EVENT_TOUCH_MOVED)
    listener:registerScriptHandler(onTouch,cc.Handler.EVENT_TOUCH_ENDED )
    local eventDispatcher = node:getEventDispatcher()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, node)

没想到cocos其实提供了三个内部函数:

  • sender:getTouchBeganPosition() --触摸开始的坐标
  • sender:getTouchMovePosition()  --触摸移动的坐标
  • sender:getTouchEndPosition()     --触摸结束的坐标

非常好用,一般与之配合使用的场景经常是判断点击是否在控件上,可以这样操作:

    local location = sender:getTouchMovePosition() --获取触摸点坐标
    local locationInNode = sender:convertToNodeSpace(location)  --转换到目标节点的坐标系下
    local my_pos = sender:getContentSize()  --获取目标节点控件大小
    my_pos .x = 0
    my_pos .y = 0
    if cc.rectContainsPoint(my_pos , locationInNode) then --比较是否在其中
  
    end