C# 将触摸手势转换为鼠标手势

C# 将触摸手势转换为鼠标手势,c#,xna,windows-runtime,monogame,gestures,C#,Xna,Windows Runtime,Monogame,Gestures,下面是一些我必须处理tpouch手势的代码示例: public void HandleInput() { TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete | GestureType.DoubleTap | GestureType.Tap; while (TouchPanel.IsGestureAvailable) { GestureSa

下面是一些我必须处理tpouch手势的代码示例:

public void HandleInput()
{
    TouchPanel.EnabledGestures =
       GestureType.FreeDrag | GestureType.DragComplete | GestureType.DoubleTap | GestureType.Tap;

    while (TouchPanel.IsGestureAvailable)
    {
        GestureSample gs = TouchPanel.ReadGesture();
        switch (gs.GestureType)
        {
             case GestureType.FreeDrag:
                 ...
                 break;

             case GestureType.DragComplete: 
                 ...
                 break;

             case GestureType.DoubleTap:    
                 ...
                 break;

             case GestureType.Tap:                    
                 ...
                 break;

 ...
这是使用monogame(即XNA)编写的,我后来意识到,在目标机器(WinRT)没有触摸功能的情况下,我没有处理鼠标输入

到目前为止,我遇到的处理鼠标手势的唯一方法如下:

 MouseState mouseState = Mouse.GetState();
 Vector2 mousePosition = new Vector2(mouseState.X, mouseState.Y);

 if (mouseState.LeftButton == ButtonState.Pressed)
    ...
我可以看出,在这里实现同样的目标是可能的,但我希望自己能偷懒,走捷径(并希望生成更简单的代码)。因此,我的问题有两个:

  • 有可能处理鼠标的“手势”吗
  • 如果不是,有没有办法让XNA相信鼠标实际上是触摸的(Windows8模拟器做得很好)

  • 我想你真的不想把触摸和鼠标手势结合起来。如果您的游戏使用多点触控,那么耦合它们几乎是不可能的。您必须在代码中分离触摸样式

    但是如果你真的坚持耦合它们,你可以创建你自己的包装类,将所有的输入转换成你想要的,并传递给你的游戏对象。即,不使用Mouse.GetState()->MyGlobalInput.GetState(),它将评估触摸或鼠标是否可用/使用

    但请记住:用户希望触摸输入与鼠标输入不同,因为体验是完全不同的,因此这两种情况都有各自的逻辑。当您想要使用鼠标或触摸时(或者当两者都可用时,让用户选择?),请使用全局设置。有了自己的逻辑,你就可以更容易地建立鼠标和触摸的手势。这也是一个架构视图/决策

    编辑:另外,如果您指的是monogame
    Microsoft.Xna.Framework.Input.Touch.GestureSample
    ,则它只采用一些与Touch vector2位置相同的矢量2位置。你只需要一些聪明的翻译鼠标触摸输入