它比起初看起來更棘手。
我認爲system.setTapDelay()確實有效。至少它似乎。 但我的理解是,這並不意味着排除單擊。只接受較慢的雙擊。或者,也許這個功能的文檔只是誤導。無論如何,我們希望Corona dev團隊將來能夠澄清這一點。
現在,在您的應用程序中,您必須具有必須對單個水龍頭做出反應的對象,以及必須對雙擊進行反應的對象才能正確?
甚至可能對象必須對一個或另一個做出反應,但對兩者都不起作用。但是你必須意識到,通過這個第三個設計選擇,如果單擊一次,你的物體將不得不「等」,直到它確定它不是雙擊的第一擊。你跟着?換句話說,要區分同一物體上的單擊和雙擊可能會導致單擊「滯後」一點。
要實現這一切在一個簡單的方法,我會是這樣的:
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 closure中的事件對象的值而不是傳遞其引用,這可能會導致一些內存泄漏。
function(e) onExclusiveSingleTap({
name = "tap",
x = event.x,
y = event.y,
numTaps = 1,
target = event.target
}) end