【问题标题】:XNA wp7 gesture detection issueXNA wp7手势检测问题
【发布时间】:2013-05-23 21:58:53
【问题描述】:

我必须在我的应用程序中使用两种类型的输入(手势和简单的触摸)。我遇到了问题。例如,我使用双击手势,在它检测到之前,我检测到了一个简单的触摸。这不是我期望的那样,因为简单的触摸有它自己的逻辑,这给我带来了很多问题。拖动同样的问题,在再次检测到拖动之前首先检测到简单的触摸。我如何在不处理简单触摸逻辑的情况下处理手势。 这是我尝试这样做的方式:

TouchPanel.EnabledGestures = GestureType.DoubleTap | GestureType.VerticalDrag;
        while (TouchPanel.IsGestureAvailable)
        {
            isGesture = true;
            GestureSample gestureSample = TouchPanel.ReadGesture();
            switch (gestureSample.GestureType)
            {
                case GestureType.DoubleTap:

                    //some logic
                    break;
                case GestureType.HorizontalDrag:
                    //some logic
                    break;
            }
        }


        if (Consts.TouchCollection.Count == 1) 
        {
            var touch = Consts.TouchCollection[0]; //here needed only first touch

            switch (touch.State)
            {
                case TouchLocationState.Pressed:
                     //This one called first if used double tap

                    break;
                case TouchLocatiomState.Moved:
                    //smth
                    break;
                case TouchLocationState.Released:
                    //smth
                    break;
            }
        }

当使用双击手势时,此代码调用 Pressed -> Released -> DoubleTap -> Pressed 我只想处理双击案例。如何解决这个问题? 对我的英语感到抱歉,希望我的问题很清楚。任何帮助将不胜感激

【问题讨论】:

    标签: c# windows-phone-7 xna xna-4.0 gesture


    【解决方案1】:

    为避免在处理手势后处理简单的触摸事件,请将您在触摸处理开始时设置的布尔标志添加到true,我们称之为handleSimpleTouch。如果您处理手势,请将 handleSimpleTouch 设置为 false。那么在你处理一个简单的触摸之前,检查handleSimpleTouch的值,如果为真,则正常处理,否则,什么都不做。

    【讨论】:

    • 实际上我试过这个 if (Consts.TouchCollection.Count == 1 && !isGesture) 但它没有解决问题。更清楚的是这里的例子:我画了矩形1,如果我检测到简单的触摸我再画一个矩形2,如果我检测到手势双击我旋转这个矩形1。这里是我的问题,我得到了处理简单触摸的闪烁矩形 2,因为在 xna 检测到双击之前,它处理简单触摸,任何想法,我做错了什么?
    • 带有这样的布尔标志 if (Consts.TouchCollection.Count == 1) 双击时的触摸周期 -> 释放 -> DoubleTap -> 按下这样的布尔标志 if (Consts. TouchCollection.Count == 1 && !isGesture) 循环被按下 -> 释放 ->DoubleTap。这仍然没有工作
    【解决方案2】:

    我得出的结论是,唯一可行的方法是在不使用 TouchPanel.EnabledGestures 的情况下编写您自己的输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2022-01-26
      相关资源
      最近更新 更多