Hola, sé que ya hay algunas publicaciones sobre esto, pero todavía no puedo encontrar una respuesta adecuada para el problema que estoy teniendo.marca de tiempo y velocidad de cálculo de un deslizamiento
Recién comenzada en cocoa e iOS, estoy desarrollando mi primer juego de iOS. En este juego, me gustaría poder calcular la velocidad de deslizamiento de un usuario. Estoy teniendo problemas para encontrar la distancia entre toques sucesivos en el movimiento de golpe, pero estoy teniendo dificultades para determinar el tiempo transcurrido entre los toques
en
touchesMoved:
hago cálculos con el toque actual, así como un seguimiento de el último toque previamente grabado como un UITouchen
touchesEnded:
ahora quiere calcular la velocidad del golpe, pero cuando hago algo como:doble timedelay = event.timestamp - self.previousTouch.timestamp;
esta siempre devuelve 0.
Sin embargo, el uso de gcc que soy capaz de ver que las dos marcas de tiempo no son de hecho el mismo. Además, al inspeccionar vi que los valores de NSTimeInterval para estos eventos tenían una magnitud de ~ 10^(- 300). Esto parece extraño ya que se supone que NSTimeInterval debe informar los segundos desde el inicio del sistema, ¿no es así?
También he intentado hacer un seguimiento del NSDate del toque anterior y usarlo junto con [NSDate timeIntervalSinceNow]. Esto arrojó resultados aún más extraños, devolviendo un valor alrededor de 6 cada vez. Nuevamente, dado que timerIntervalSinceNow devuelve NSTimeInterval
, este valor es muy extraño.
¿Qué no entiendo sobre las marcas de tiempo? ¿eventos? ¡Cualquier ayuda en esto sería muy apreciada! Gracias por su tiempo
algún código de apoyo:
En sampleController.h:
@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch
En 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
}
IOS5 tiene esta funcionalidad incorporada en 'UIGestureRecognizer'. –