在XNA中检测多个手势

时间:2014-01-17 19:25:30

标签: c# xna gesture monogame

前一段时间我问过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时,我没有得到任何事件。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我最后通过使用布尔变量来处理这个问题,以存储用户是否进行了双击,并将点击手势延迟了100毫秒:

Task.Delay(100).ContinueWith((args) =>
{
    if (!dblTap)

我在博客上发表了here