2012-12-19 2 views
2

코로나 SDK에서 싱글 및 더블 탭을 감지하려고합니다. 나는 활용 한 :코로나 : 더블 탭/싱글 탭

system.setTapDelay(0.5) 

을 ... 내가 더 탭 이벤트가 0.5 초에 접수되지 않은하지 않는 한 단일 탭 이벤트가 전달되지 보장 것 이해 내 main.lua 파일에. 문서에 따르면 지연은 밀리 초가 아닌 초 단위로 지정되므로 0.5입니다.

나는 다음이를 활용 한 : 단일 및 더블 탭 수익을 예상

function mapGroup:tap(event) 
    if event.numTaps >= 2 then 
     print "double tap" 
    else 
     print "single tap" 
    end 
    return true 
end 

이로. 그러나 두 번 탭 두 번 발사된다

single tap 
double tap 

우리가 더블 탭 될 수 없습니다 알고 때까지 어떻게 코로나는 단일 탭을 발사 방지 할 수 있습니까?

답변

1

처음에는 보이는 것보다 더 까다 롭습니다.

나는 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 
관련 문제