前一段时间我问过this问题,关于在XNA中检测拖动手势。对此的答案运作良好,我使用相同的方法来检测拖动和点击。但是,现在我想检测双击的第三个手势。我尝试了很多方法,但我似乎无法使用TouchCollection
来检测双击,因为我有效地尝试在拖动后检测第一个和第二个手势。这是我用来点击和拖动的代码:
foreach (TouchLocation touch in touchCollection)
{
switch (touch.State)
{
case TouchLocationState.Pressed:
if (CheckTouchLocation(touch.Position))
{
dragStart = touch;
}
else
{
dragStart = null;
}
break;
case TouchLocationState.Released:
DragRelease(touch); // Happens before I can detect double tap
break;
default:
continue;
结果,我恢复了最初的做法,因为默认情况下这似乎支持双击:
TouchPanel.EnabledGestures =
GestureType.FreeDrag | GestureType.DragComplete | GestureType.DoubleTap | GestureType.Tap;
while (TouchPanel.IsGestureAvailable)
{
GestureSample gs = TouchPanel.ReadGesture();
switch (gs.GestureType)
{
case GestureType.DragComplete:
if (gs.Delta.LengthSquared() > DRAG_TOLERANCE)
{
if (gs.Delta.X != 0 || gs.Delta.Y != 0)
{
// Do something
}
}
break;
case GestureType.Tap:
// Do something else
break;
}
}
这似乎是一个不同的问题;如果我发现freedrag
,那么我会在发布之前得到这个事件;当我如上所述检测到release
时,我没有得到任何事件。
有什么想法吗?
答案 0 :(得分:0)
我最后通过使用布尔变量来处理这个问题,以存储用户是否进行了双击,并将点击手势延迟了100毫秒:
Task.Delay(100).ContinueWith((args) =>
{
if (!dblTap)
我在博客上发表了here。