Подтвердить что ты не робот

Можно ли получить "контекстуальные" жесты в Monogame/XNA?

Я работаю над мультитач-приложением, используя Monogame, где несколько пользователей могут работать с большим экраном с несколькими сенсорными экранами с отдельными документами/изображениями/видео одновременно, и мне было интересно, можно ли сделать жесты "контекстно-зависимыми" ", т.е. два пальца, зажимающие документ на одной стороне стены, не должны влиять на кого-то, панорамирующего другую сторону стены.

Как работает Monogame, все входные точки преобразуются в жесты, которые можно читать с помощью:

if (TouchPanel.IsGestureAvailable)
{
     var gesture = TouchPanel.ReadGesture();
     // do stuff
}

Есть ли способ сделать жесты ограничены определенной точкой на экране, или мне нужно реализовать это самостоятельно? Например, посмотрев исходный код, кажется, что класс TouchPanelState выполняет всю работу, но, к сожалению, его конструкторы internal.

4b9b3361

Ответ 1

Эта функция не встроена в MonoGame, так как она не является частью оригинальной XNA. По сути, вам нужно больше, чем один "логический" TouchPanel, определенный его суб-прямоугольником окна. Однако TouchPanel статичен, поэтому для всей игры по умолчанию используется только одна для XNA.

Хорошей новостью является то, что MonoGame делает свое собственное распознавание жестов. Итак, код есть, вам просто нужно внести некоторые изменения в MonoGame.

Например,...
-Make TouchPanel - нестатический класс, который может быть выделен с заданным подстроем.
-Добавить нестатические версии всех методов TouchPanel.
- Статические методы перенаправляются на одноэлемент/экземпляр TouchPanel, сохраняя старый API.
... теперь вы можете дополнительно выделить больше TouchPanel (ов), которые НЕ ВСЕ на экране.

Примечание. Это не поможет вам, но MonoGame позволяет вам иметь более одного окна ОС (только для окон только afaik), и в этом случае статическое TouchPanel является первым окном и существует отдельный API для доступа к сенсорному вводу/жесты для любых дополнительных окон.