Hey, bunun hakkında zaten birkaç mesaj olduğunu biliyorum, ancak hala sahip olduğum sorun için yeterli bir yanıt bulamıyorum.zaman damgası ve kaydırma hızının hesaplanması
Sadece yeni kakao ve iOS için, ilk iOS oyunumu geliştirmenin tam ortasındayım. Bu oyunda bir kullanıcının tokat hızını hesaplayabilmek istiyorum. Ben tokatlamak hareket ardışık dokunuşlar arasındaki mesafeyi bulmakta hiç zorluk yaşıyorum ama touchesMoved:
içinde
dokunuşlar arasında geçen zamanı belirleyen zorluk yaşıyorum ben şimdiki dokunuşla hesaplamaları yapmak hem de takip
touchesEnded:
bir UITouchgeçen önceden kaydedilmiş dokunmatik şimdi tokatlamak hızını hesaplamak istiyorum ama böyle bir şey yapmak zaman:
çift timeDelay = event.timestamp - self.previousTouch.timestamp;
bu her zaman iki damgaları aslında aynı DEĞİLDİR olduğunu görmek mümkün değilim gcc kullanarak Ancak 0.
döndürür. Ayrıca, denetledikten sonra, bu olayların NSTimeInterval değerlerinin ~ 10^(- 300) büyüklüğünde olduğunu gördüm. Bir NSTimeInterval'ın sistem başlangıcından beri saniyeler bildirmesi beklendiği gibi bu garip görünüyor.
Ayrıca, önceki dokunuştaki NSDate'i takip etmeyi ve [NSDate timeIntervalSinceNow] ile birlikte kullanmayı denedim. Bu, her seferinde 6 civarında bir değer döndüren daha da garip sonuçlar verdi. Yine, timerIntervalSinceNow bir NSTimeInterval
döndürdüğünden, bu değer çok tuhaftır.
Zaman damgaları hakkında neyi anlamadım? olaylar? Bu konuda herhangi bir yardım çok takdir edilecektir! Zaman ayırdığınız için Teşekkür
bazı destek kodu: sampleController.h yılında
: sampleController.m yılında
@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch
:
@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 için bu vardır kaydeder "UIGestureRecognizer" için yerleşik işlevsellik. –