отметка времени и расчет скорости пролистывания
Эй, я знаю, что уже есть несколько сообщений об этом, но я все еще не могу найти адекватного ответа на проблему, с которой я сталкиваюсь.
Я новичок в какао и iOS, и я нахожусь в процессе разработки своей первой игры для iOS. В этой игре я хотел бы иметь возможность рассчитать скорость удара пользователя. У меня нет проблем с поиском расстояния между последовательными касаниями в движении пальцем, но я испытываю трудности с определением времени, прошедшего между касаниями
in touchesMoved:
I do calculations with the current touch as well as keep track of the last previously recorded touch as a UITouch
in touchesEnded:
I now want to calculate the speed of swipe, but when I do something like:
double timeDelay = event.timestamp - self.previousTouch.timestamp;
это всегда возвращает 0.
Однако, используя gcc, я могу видеть, что две метки времени на самом деле НЕ одинаковы. Кроме того, после проверки я увидел, что значения NSTimeInterval для этих событий были на уровне ~ 10 ^ (- 300). Это кажется странным, так как NSTimeInterval должен сообщать о секундах с момента запуска системы, не так ли?
Я также пытался отслеживать NSDate предыдущего касания и использовать его вместе с [NSDate timeIntervalSinceNow]. Это дало еще более странные результаты, возвращая значение около 6 каждый раз. Опять же, так как timerIntervalSinceNow возвращаетNSTimeInterval
это значение очень странное.
Что я не понимаю о метках времени? События? Любая помощь по этому вопросу будет принята с благодарностью! Спасибо за ваше время
некоторый поддерживающий код:
В sampleController.h:
@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch
В 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
}