Zeitstempel und Berechnung der Geschwindigkeit eines Wischens

Hey, ich weiß, dass es bereits ein paar Posts dazu gibt - aber ich kann immer noch keine adäquate Antwort auf das Problem finden, das ich habe.

Ich bin gerade dabei, mein erstes iOS-Spiel zu entwickeln. In diesem Spiel möchte ich in der Lage sein, die Geschwindigkeit des Schlagens eines Benutzers zu berechnen. Ich habe keine Schwierigkeiten, den Abstand zwischen aufeinanderfolgenden Berührungen in der Wischbewegung zu finden, aber ich habe Schwierigkeiten, die zwischen den Berührungen verstrichene Zeit zu bestimmen

imtouchesMoved: Ich berechne mit der aktuellen Berührung und behalte die zuletzt aufgezeichnete Berührung als UITouch im Auge

imtouchesEnded: Ich möchte jetzt die Geschwindigkeit des Wischens berechnen, aber wenn ich etwas mache wie:

double timeDelay = event.timestamp - self.previousTouch.timestamp;

Dies gibt immer 0 zurück.

Mit gcc kann ich jedoch feststellen, dass die beiden Zeitstempel tatsächlich NICHT identisch sind. Bei der Inspektion stellte ich außerdem fest, dass die NSTimeInterval-Werte für diese Ereignisse in der Größenordnung von ~ 10 ^ (- 300) lagen. Dies scheint seltsam, da ein NSTimeInterval Sekunden seit dem Systemstart melden soll, nicht wahr?

Ich habe auch versucht, das NSDate der vorherigen Berührung zu verfolgen und es in Verbindung mit [NSDate timeIntervalSinceNow] zu verwenden. Dies führte zu noch seltsameren Ergebnissen und lieferte jedes Mal einen Wert um 6 zurück. Da timerIntervalSinceNow wieder a zurückgibtNSTimeIntervalDieser Wert ist sehr seltsam.

Was verstehe ich nicht über Zeitstempel? Veranstaltungen? Jede Hilfe hierzu wäre sehr dankbar! Vielen Dank für Ihre Zeit

einige unterstützende Codes:

In sampleController.h:

@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch

In sampleController.m:

@synthesize previousTouch = _previousTouch, currentTouch = _currentTouch;
...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
       self.currentTouch = [[event allTouches] anyObject];
       // do stuff with currentTouch
}
...
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
       self.previousTouch = self.currentTouch;
       self.currentTouch = [[event allTouches] anyObject];
       // do stuff with currentTouch
}
...
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
       float distanceMoved = [self.touch locationInView:self.playView].x - 
              [self.touch previousLocationInView:self.playView].x;
       // attempt 1
       double timeElapsed = self.currentTouch.timestamp - self.previousTouch.timestamp;

       // attempt 2
       double timeElapsed = event.timestamp - self.previousTouch.timestamp;

       // do stuff with distanceMoved and timeDelay
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage