【问题标题】:Detecting multiple gestures in XNA在 XNA 中检测多个手势
【发布时间】:2014-01-17 19:25:29
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: c# xna gesture monogame


    【解决方案1】:

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

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

    我在博客上写了here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多