2012-06-17 18 views
5

こんにちは私はこのことについて既にいくつかの記事があることを知っています - しかし私はまだ私が持っている問題に対して適切な答えを見つけることができません。スワイプのタイムスタンプと計算速度

私は初めてのiOSゲームを開発する途中です。ココアとiOSの新機能です。このゲームでは、ユーザーのスワイプの速度を計算できるようにしたいと考えています。私は、スワイプ動作で連続タッチの間の距離を見つける何の難しさを持っていないんだけど、touchesMoved:

  • タッチの間の経過時間を決定する難しさを持っています私は、現在のタッチで計算を行うだけでなく、を追跡touchesEnded:でUITouch

  • として最後に、以前に記録したタッチ私は今、スワイプの速度を計算したいが、私のような何かを行うとき:

    ダブルtimeDelay = event.timestamp - self.previousTouch.timestampを。

これは常に私は2つのタイムスタンプは、実際には同じではないことを見ることができるよGCCを使用して、しかし、0

を返します。さらに、検査すると、これらのイベントのNSTimeInterval値が〜10 ^( - 300)の大きさであることがわかりました。これは、NSTimeIntervalがシステムの起動から数秒を報告することになっているので、奇妙に思えるでしょうか?

また、以前のタッチのNSDateを記録しておき、[NSDate timeIntervalSinceNow]と組み合わせて使用​​しました。これにより、毎回6回程度の価値が返ってきました。繰り返しますが、timerIntervalSinceNowはNSTimeIntervalを返します。この値は非常に奇妙です。

私はタイムスタンプについて何を理解していませんか?イベント? これに関するお手伝いがあれば幸いです!お時間を おかげ

いくつかのサポートコード:sampleController.hで

:sampleController.mで

@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 
} 
+0

iOS5をするためには、これを持って保存します。 'UIGestureRecognizer'に組み込まれた機能 –

答えて

4

UIPanGestureRecognizerは、あなたがかもしれvelocityInView proertyを持っています使用を見つける。ドキュメントはhere

また、この光線wenderlich tutorialが参考になります。

(これはピシャリではありません - 。しかし、いくつかのGoogle検索は、この種のものに材料の負荷を上げるには、すべての髪引っ張って大きな人生の質問;-)

+0

私はUIPanGestureRecognizerを認識していますが、それにも問題があります。 おそらく、私が取り組んでいることについてもっと多くの背景があります。ゲームはレンガビーカーの種類であり、そのように私はいつもtouchesBegan:とtouchesMoved:パドルの状態を更新するために使用しています。私はUIPanGestureRecognizerを使って、ターゲットのアクションセレクタメソッド内で[sender velocityInView:]を使ってスワイプの速度を更新しようとしました。しかし、これを行うときに、UIPanGestureが認識されるたびに、それはtouchesMovedを中断します。助言? –

+0

申し訳ありませんが、cancelsTouchesInViewプロパティについて知っています。今は完璧に動作します。 –

+0

あなたはそれが分かれてうれしい! –