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

时间:2014-03-29 15:17:30

标签: c# xna windows-runtime monogame gestures

这是我必须处理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)
    ...

我可以看到在这里可以实现相同的目标,但是我想变得懒惰并且切入一个角落(并且希望产生更简单的代码)。所以,我的问题有两个:

  1. 是否可以处理鼠标"手势"?
  2. 如果不是,有没有办法让XNA确信鼠标实际上是触摸的(Windows 8的模拟器做得非常好)。

1 个答案:

答案 0 :(得分:0)

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

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

但请记住:用户期望触摸输入与鼠标输入不同,因为体验非常不同,因此这意味着两种情况都有自己的逻辑。当您想要使用鼠标或触摸时(或两者都可用时,让用户选择?),使用全局设置。拥有自己的逻辑将允许您更轻松地构建鼠标和触摸的手势。这也是一个架构视图/决策

编辑:另外,如果你指的是单一游戏Microsoft.Xna.Framework.Input.Touch.GestureSample,它只需要一些与触摸向量2位置相同的向量2位置。您只需要一些智能翻译鼠标即可触摸输入。