这比起初看起来更棘手。
我认为 system.setTapDelay() 确实有效。至少看起来如此。但我的理解是,这并不意味着要排除单击。只接受较慢的双击。或者这个函数的文档可能只是误导。无论如何,让我们希望 Corona 开发团队在未来澄清这一点。
现在,在您的应用程序中,您有必须对单击做出反应的对象,以及必须对双击做出反应的对象,对吗?
甚至可能是必须对一个或另一个做出反应的对象,但不能同时对两者做出反应。但是您必须注意,使用第三种设计选择时,如果单击,您的对象将不得不“等待”,直到确定它不是双击的第一次。你跟着?换句话说,要区分对同一对象的单击和双击可能会导致单击“滞后”一点。
为了以简单的方式实现所有这些,我会这样:
function onSingleTap( event )
if event.numTaps == 1 then
print("received a single tap")
end
end
objectThatRespondsToSingleTapOnly:addEventListener( "tap", onSingleTap )
function onDoubleTap( event )
if event.numTaps >= 2 then
print("received a double tap")
end
end
objectThatRespondsToDoubleTapOnly:addEventListener( "tap", onDoubleTap )
现在,如果您还想要区分单人与双人的对象,您可以添加:
local doubleTapTimeout = 600 -- values under 300 become hard to use
-- BTW make this a little higher than the tap delay, if you set it manually
function onExclusiveSingleTap( event )
print("received an exclusive single tap")
end
function onExclusiveDoubleTap( event )
print("received an exclusive double tap")
end
function onExclusiveTap( event )
if event.numTaps == 1 then
event.target.singleTapWaiting = timer.performWithDelay(
doubleTapTimeout,
function(e) onExclusiveSingleTap( event ) end
)
elseif event.numTaps >= 2 then
timer.cancel( event.target.singleTapWaiting )
onExclusiveDoubleTap( event )
end
end
objectThatRespondsToBothTaps:addEventListener( "tap", onExclusiveTap )
我只是想知道你是否不应该在 Lua 闭包中复制事件对象的值而不是传递它的引用,这可能会导致一些内存泄漏。
function(e) onExclusiveSingleTap( {
name = "tap",
x = event.x,
y = event.y,
numTaps = 1,
target = event.target
} ) end