触摸事件检测问题

时间:2013-06-21 09:24:09

标签: lua corona

当您向对象添加事件侦听器并向外移动时,该对象event.phase == "ended"将不会被触发,因为它在对象外部检测到。 我的问题:即使用户在对象外部释放触摸,我们是否可以检测到event.phase == "ended",或者我们可以通过其他任何方式检测用户是否在不使用运行时事件监听器的情况下抬起手指?

2 个答案:

答案 0 :(得分:3)

您可以尝试以下方法:

local bg = display.newRect(0,0,display.contentWidth,display.contentHeight)

local rect = display.newRect(100,200,100,100)
rect:setFillColor(0)

local isRectTouched = false;
local function bgTouch_function(e)
  if(isRectTouched == true and e.phase == "ended")then
      isRectTouched = false;
      print("Started on Rect and ended outside")
  end
end
bg:addEventListener("touch",bgTouch_function)

local function rectTouch_function(e)
  if(e.phase == "began" or e.phase == "moved")then
      isRectTouched = true;
      print("began/moved .... rect")
  else
      isRectTouched = false;
      print("ended .... rect")
  end
end
rect:addEventListener("touch",rectTouch_function)

继续编码..................

答案 1 :(得分:2)

我建议使用内置的setfocus方法,它允许您将触摸事件绑定到特定的显示对象。即使您离开对象,也可以让您获取事件。您可以阅读此方法here快乐编码。

local function bind(event)

 if event.phase=='began' then
  display.getCurrentStage():setFocus(event.target)
 end

 if event.phase=='moved' or event.phase=='began' then

 elseif event.phase=='ended' then  
  display.getCurrentStage():setFocus(nil)
  -- Whatever you want to do on release here
 end
end