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

本文关键字:鼠标手势 转换 触摸 | 更新日期: 2023-09-27 17:54:42

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

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的模拟器在这方面做得很好)

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

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

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

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

编辑:另外,如果你指的是一夫一妻制Microsoft.Xna.Framework.Input.Touch.GestureSample,它只需要一些与触摸vector2位置相同的vector2位置。你只需要一些智能翻译鼠标触摸输入