2013-04-29 5 views
0

나는 탭과 긴 대기 제스처 인식기를 결합하는 방법에 대한 스택 교환 게임 개발 사이트에 this question를 요청, 다음과 같은 답변을 받았습니다 :touchesBegan과 touchesEnded 사이에 호출되는 메서드가 있습니까?

이 사람이 한 번 타이머를 설정하는 것입니다 처리하는 방법을 전화를 두드린다. 당신이 구현하려는 가장 사용자 친화적 인 시나리오는 다음과 같이 보일 것입니다 : 당신이 탭을 감지하면, 각 프레임에 타이머 (t = timeToRepeat)

  • 을 설정
    1. 는 DT
      에 의해 타이머를 감소
    2. 타이머가 0에 도달하면, 스프라이트에게 타일을 이동하고 사용자가 타이머의 첫 번째 사이클 전에 손가락을 해제하면 타이머를
    3. 를 재설정, 스프라이트를 한 타일을 이동

    분명히 타이머를 설정하는 시간은 스프라이트의 이동 속도를 결정합니다. 당신이 원한 행동의 종류에 따라서이 주제에 약간 변이가있다. 예를 들어, 탭을 감지하면 즉시 스프라이트를 한 번 이동하고 # 4 단계를 무시할 수 있습니다.

  • 나는이 그것을 할 수있는 방법입니다 동의, 그래서이를 구현하려고하고 그렇게 할 수있는 다음 코드로 올라와있다 :

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
        //This records the time when the user touches the screen 
        self.startTime = [NSDate date]; 
    } 
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    
        NSTimeInterval temp = [self.startTime timeIntervalSinceNow]; 
        NSTimeInterval holdTime = temp * -1; 
    
        if(holdTime < self.threshold) { 
         //Tap 
        } 
        else { 
         //Hold 
        } 
    } 
    

    이 코드는 작동하지만 난 것을 깨달았다 사용자가 화면을 누르고있는 동안 타이머 코드를 호출해야하며, 마친 후에는 타이머 코드를 호출해야합니다. 따라서 은 사용자가 누르는 동안 touchesEnded에서 코드를 호출하는 방법이 있습니까?

    +0

    나는 해답을 가지고 있지만, 나는 모든 대리인을 구현하고 체크 브레이크 포인트를 표시하려고 시도합니다. –

    +1

    당신이 놓친 부분은 그들이 "타이머를 시작했다"고 말한 때였습니다. 방금 시간을 기록했습니다. 타이머 만료시 메서드를 호출하고 (그리고 스프라이트를 이동하는)이 메서드에서 반복 타이머를 시작해야합니다. touchesEnded는 타이머를 취소합니다. – lnafziger

    답변

    2

    기술적으로 사용자가 손가락을 완벽하게 유지하면 그 사이에 호출되는 방법이 없습니다. 실제로는 touchesMoved이 무리라고합니다. 당신은 그냥 대신 자신의 시간을 추적하는 데 사용해야합니다