触摸事件检测问题

当您将事件侦听器添加到对象并移动到对象之外时,event.phase ==“ended”将不会触发,因为它检测到对象外部。

我的问题是:是否有办法即使用户在对象之外释放触摸也可以检测到event.phase ==“ended”,或者是否有其他方法可以检测用户是否已经放开手指,而不使用运行时事件侦听器?

点赞
用户1979583
用户1979583

你可以试试以下方法:

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)

继续编程……

2013-06-22 09:19:29
用户2738294
用户2738294

我建议使用内置的 setfocus 方法来绑定触摸事件到特定的显示对象。这样即使你移出对象,也可以获取事件。你可以在这里了解这种方法。祝编程愉快。

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
2013-09-02 00:24:07