0

Stack Exchange Game Development Site で、タップと長押しのジェスチャ認識エンジンを組み合わせる方法についてこの質問をしたところ、次の回答が得られました。

これに対処する方法は、人が電話をタップしたらタイマーを設定することです。実装する最もユーザー フレンドリーなシナリオは次のようになります。

  1. タップを検出すると、タイマーを設定します (t = timeToRepeat)
  2. 各フレームで、タイマーを dt ずつ減らします
  3. タイマーがゼロになったら、スプライトを 1 タイル移動し、タイマーをリセットします。
  4. ユーザーがタイマーの最初のサイクルの前に指を離した場合、スプライトを 1 タイル移動します。

明らかに、タイマーを設定した時間によって、スプライトの移動速度が決まります。このテーマには、必要な動作の種類に応じていくつかのバリエーションがあります。たとえば、タップを検出するとすぐにスプライトを 1 回移動し、手順 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 でコードを呼び出す方法はありますか?

4

1 に答える 1

2

技術的には、ユーザーが指を完全に保持している場合でも、それらの間で呼び出されるメソッドはありません。ただし、実際にtouchesMovedは束と呼ばれます。NSTimer自分で時間を追跡する代わりに、ただしを使用する必要があります

于 2013-04-29T17:40:27.843 に答える