znacznik czasu i obliczanie prędkości machnięcia
Hej, wiem, że jest już kilka postów na ten temat - ale wciąż nie mogę znaleźć odpowiedniej odpowiedzi na problem, który mam.
Po prostu nowy w kakao i iOS, jestem w trakcie opracowywania mojej pierwszej gry na iOS. W tej grze chciałbym móc obliczyć szybkość machnięcia użytkownika. Nie mam trudności ze znalezieniem odległości między kolejnymi dotknięciami w ruchu machnięcia, ale mam trudności z określeniem czasu, jaki upłynął między dotknięciami
wtouchesMoved:
Wykonuję obliczenia z bieżącym dotykiem, a także śledzę ostatnio nagrany dotyk jako UITouch
wtouchesEnded:
Teraz chcę obliczyć szybkość przesuwania, ale kiedy robię coś takiego:
double timeDelay = event.timestamp - self.previousTouch.timestamp;
to zawsze zwraca 0.
Jednak używając gcc widzę, że te dwa znaczniki czasu NIE są w rzeczywistości takie same. Dodatkowo, po sprawdzeniu zobaczyłem, że wartości NSTimeInterval dla tych zdarzeń były na poziomie ~ 10 ^ (- 300). Wydaje się to dziwne, ponieważ NSTimeInterval ma zgłaszać sekundy od momentu uruchomienia systemu, prawda?
Próbowałem także śledzić NSDate poprzedniego dotyku i używać go w połączeniu z [NSDate timeIntervalSinceNow]. Dało to jeszcze dziwniejsze wyniki, zwracając wartość około 6 za każdym razem. Ponownie, ponieważ timerIntervalSinceNow zwraca aNSTimeInterval
, ta wartość jest bardzo dziwna.
Czego nie rozumiem ze znacznikami czasu? wydarzenia? Każda pomoc na ten temat byłaby bardzo mile widziana! Dziękuję za Twój czas
jakiś kod pomocniczy:
W sampleController.h:
@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch
W 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
}