【问题标题】:Translating touch gestures to mouse gestures将触摸手势转换为鼠标手势
【发布时间】:2014-03-29 15:17:30
【问题描述】:

这是我必须处理 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 的模拟器很好地做到了这一点)。

【问题讨论】:

    标签: c# xna windows-runtime monogame gestures


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多