我如何测量拖动手势的速度?

我想测量我的Windows Phone上的拖动速度(FreeDrag,VerticalDrag,Horizo​​ntalDrag)手势。 例如,如果测得的阻力速度是40公里/小时,则玩家将以40公里/小时的速度飞行的拖动方向上射击子弹。

我如何测量Windows Phone上拖动手势的速度?

更新:我不知道如何衡量时间。 是否有可能没有touchCollection,或者我应该使用touchCollection来确定StartTime和EndTime?

我不确定是否需要touchCollection块。 另外,我不确定是否可以使用两种不同的types,即TimeSpan for StartTime和EndTime的DateTime。

什么是衡量时间的最好方法?

TimeSpan StartTime; DateTime EndTime; TouchPanel.EnabledGestures = GestureType.FreeDrag; protected override void Update(GameTime gameTime) { TouchCollection touchCollection = TouchPanel.GetState(); foreach (TouchLocation tl in touchCollection) { GestureSample gs = TouchPanel.ReadGesture(); if ((tl.State == TouchLocationState.Pressed)) { StartTime = gs.Timestamp; } if ((tl.State == TouchLocationState.Released)) { EndTime = DateTime.Now; } } while (TouchPanel.IsGestureAvailable) { GestureSample gs = TouchPanel.ReadGesture(); switch (gs.GestureType) { case GestureType.FreeDrag: StartTime = gs.Timestamp; break; } } base.Update(gameTime); } 

使用上一个问题的信息,你知道拖动的增量是多less。 这给你距离。 唯一的另外一件事就是你需要速度。 因此,logging触摸开始的时间,以及完成时间。 那个时候的差别就是手势完成的时间。

现在你有距离和时间。 所以速度等于distance/time

尽管这在理论上是可行的,但我认为你需要在实践中testing它的工作效果。 我认为你会发现1:1的刷卡速度与子弹速度的比率有点难以控制,特别是如果用户还需要定义拍摄方向的话。

最快/最简单的方法是获取触摸的位置和时间,然后获取释放的位置和时间。 然后将位置差(这是一个向量)除以时间差,可以近似于速度。

但是,有一些更复杂的方法可以做到这一点。 例如,如果要使速度测量能够抵抗指针最终位置的抖动/变化,则可以定期对触摸和释放之间的指针位置进行采样,然后对指针进行线性拟合位置(每个组件)与时间。 这有助于纠正手在移动指针时产生拱形的自然倾向以及抖动。