2014-03-29 2 views
2

Вот пример некоторого кода я должен обрабатывать 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 делает это очень хорошо).

ответ

0

Я думаю, что вы действительно не хотите сочетать жесты касания и мыши. Если в вашей игре используется мультитач, то их было бы почти невозможно. Вам нужно будет отделить стили касания в коде.

Но если вы действительно настаиваете на их объединении, вы можете создать свой собственный класс-оболочку, который переведет все входные данные в то, что вы хотите, и передайте их своим игровым объектам. То есть вместо использования Mouse.GetState() -> MyGlobalInput.GetState(), который будет оценивать доступность/использование касания или мыши.

Но помните: пользователь ожидает, что сенсорный ввод отличается от ввода с мыши, поскольку опыт отличается от другого, поэтому он подразумевает, что оба случая имеют свою собственную логику. Используйте глобальные настройки, когда вы хотите использовать мышь или сенсорный экран (или когда оба доступны, разрешите пользователю выбрать?). Благодаря своей собственной логике вы сможете легко создавать жесты для мыши и касаться. Это также архитектурный вид/решение

Редактирование: также, если вы имеете в виду моногоним Microsoft.Xna.Framework.Input.Touch.GestureSample, он занимает всего несколько позиций vector2, которые совпадают с положениями касания vector2. Вам просто нужен умный перевод для мыши, чтобы коснуться ввода.

 Смежные вопросы

  • Нет связанных вопросов^_^