Gameplay: Сенсорное управление и поддержка 2 в 1 в игровых приложениях

Загрузить статью [Eng., PDF 632KB]

GestureWorks Gameplay — это новый способ взаимодействия с популярными играми на ПК. Программа Gameplay для Windows 8 позволяет игрокам использовать и создавать собственные виртуальные контроллеры для сенсорного управления, которые можно применять в существующих играх. Каждый виртуальный контроллер добавляет кнопки, жесты и прочие элементы управления, которые сопоставляются с поддерживаемыми игрой средствами управления. Кроме того, игроки могут применять сотни индивидуально настраиваемых жестов для взаимодействия с игрой на экране. Сотрудничество компании Ideum с корпорацией Intel позволило получить доступ к технологиям и инженерным ресурсам, чтобы реализовать возможности сенсорного управления в Gameplay.

Посмотрите этот короткий ролик, поясняющий принцип работы Gameplay.

Виртуальные контроллеры

В отличие от традиционных игровых контроллеров виртуальные контроллеры полностью настраиваются, а игроки могут обмениваться ими с друзьями. Программа Gameplay работает на планшетах с Windows 8, ультрабуках, устройствах 2 в 1, моноблоках и даже мультисенсорных планшетах с большими экранами.


Рисунок 1 ‒ Программа Gameplay в действии на планшете с процессором Intel Atom

«Виртуальный контроллер реален! Программа Gameplay охватывает сотни игр для ПК, не поддерживающих сенсорное управление, и позволяет играть в них на совершенно новом поколении мобильных устройств, — говорит Джим Спадаччини (Jim Spadaccini), директор компании Ideum, создавшей GestureWorks Gameplay. — Виртуальные контроллеры Gameplay лучше физических контроллеров, поскольку их можно полностью настраивать и изменять. Мы с интересом ожидаем распространения Gameplay среди игроков».


Рисунок 2 ‒ Главная страница Gameplay

Вместе с GestureWorks Gameplay поставляется несколько десятков уже готовых виртуальных контроллеров для популярных игр для Windows (в настоящее время поддерживается свыше 116 уникальных наименований). В программе Gameplay пользователи также могут настраивать существующие контроллеры и изменять их раскладку. Программа также включает удобное в использовании средство создания виртуальных контроллеров: пользователи могут создавать собственные контроллеры для множества популярных игр для Windows, распространяемых с помощью службы Steam.


Рисунок 3 ‒ Раскладка виртуального контроллера

Пользователи могут размещать джойстики, переключатели, колесики прокрутки и кнопки в любых местах экрана, изменять размер и прозрачность элементов управления, добавлять цвета и подписи. Также можно создавать несколько представлений разметки и переключаться между ними в любой момент игры. Благодаря этому пользователь может создавать представления для разных действий в игре, например в ролевой игре можно создать одно представление для боя, а другое — для управления снаряжением.


Рисунок 4 ‒ Глобальное представление жестов виртуального контроллера

Программа Gameplay, в основе которой лежит движок обработки жестов GestureWorks Core, поддерживает свыше 200 глобальных жестов. Простейшие глобальные жесты, такие как касание, перетаскивание, сведение/разведение пальцев и поворот, поддерживаются по умолчанию, но также настраиваются. Это позволяет расширять возможности контроллеров и применять мультисенсорные жесты для дополнительного управления в играх на ПК. Например, определенные действия или боевые приемы в шутерах от первого лица можно активировать одним жестом вместо нажатия нескольких кнопок. Gameplay также включает экспериментальную поддержку акселерометров: в гонках можно поворачивать, наклоняя ультрабук или планшет. Программа обнаруживает переключение устройств 2 в 1 в режим планшета, чтобы при необходимости включить виртуальный контроллер.

Проблемы, возникшие при разработке

Разрабатывать такую удобную программу было непросто. Для воплощения идеи Gameplay в жизнь потребовалось преодолеть ряд технических проблем. Некоторые проблемы удалось решить традиционными методами программирования, для других проблем потребовались более изощренные решения.

Поддержка переключения 2 в 1

Еще в самом начале разработки Gameplay, мы решили добавить поддержку устройств 2 в 1. Идея была в том, что приложение работает постоянно, но отображение контроллеров не происходит в настольном режиме. В случае перехода в режим планшета, контроллер Gameplay начинает отображаться для обеспечения сенсорного управления в приложении. Активируйте поддержку в настройках виртуального контроллера на устройствах 2 в 1.


Рисунок 5Настройки виртуального контроллера

Для тех, кто хочет получить дополнительную информацию о переключении режимов в устройствах 2 в 1, в разделе Ресурсы приведена отличная рекомендация с примерами кода.

Внедрение DLL

Внедрение DLL (DLL injection) — это метод, используемый для выполнения кода внутри адресного пространства другого процесса путем загрузки внешней библиотеки динамической компоновки. Внедрение DLL часто используется внешними программами для вредоносных целей, но эту технологию можно использовать и в «мирных целях», чтобы расширить возможности программы так, как это не было предусмотрено ее авторами. В программе Gameplay нам требовался способ вставки данных в поток входных данных процесса (запущенной игры), чтобы сенсорный ввод можно было преобразовать во входные данные, распознаваемые игрой. Из множества методов реализации внедрения DLL программисты Ideum выбрали вызовы подключения к Windows в API SetWindowsHookEx. В конечном итоге выбрали подключения к определенным процессам вместо глобальных подключений по соображениям производительности.

Запуск игр из сторонней оболочки запуска

Мы изучили два метода подключения к адресному пространству целевых процессов. Приложение может подключиться к адресному пространству запущенного процесса, или же приложение может запустить целевой исполняемый файл в качестве дочернего процесса. Оба метода вполне жизнеспособны. Тем не менее на практике оказалось, что намного проще отслеживать и перехватывать процессы или потоки, созданные целевым процессом, если наше приложение является родительским по отношению к этому целевому процессу.

При этом возникает проблема для клиентов приложений, таких как Steam и UPlay, запускаемых при входе пользователя в систему. В Windows не предоставляется гарантированного порядка запуска процессов, а процесс Gameplay должен быть запущен до этих процессов, чтобы получить возможность подключаться к управлению. Gameplay решает эту проблему путем установки компактной системной службы, которая отслеживает запуск приложений при входе пользователя в систему. Если запускается одно из интересующих нас клиентских приложений, Gameplay может подключиться к ней в качестве родительского процесса, и тогда элементы управления будут отображаться нужным образом.

Полученный опыт

Фильтрация данных мыши

При разработке мы столкнулись с тем, что в некоторых игра неверно обрабатывались входные данные виртуальной мыши, полученные с сенсорного экрана. Эта проблема чаще всего возникала в шутерах от первого лица или в ролевых играх, где при помощи мыши выбирается направление взгляда. Проблема состояла в том, что входные данные мыши, полученные с сенсорного экрана, были абсолютными по отношению к какой-либо точке на экране, а значит, и в игровой среде. Изза этого сенсорный экран был практически бесполезным в качестве устройства для управления направлением взгляда с помощью мыши. Решить эту проблему удалось путем фильтрации входных данных мыши, перехватывая поток входных данных игры. Это дало возможность имитировать входные данные мыши для управления направлением взгляда с помощью такого экранного элемента управления, как джойстик. Потребовалось немало времени и усилий, чтобы настроить чувствительность джойстика и зону нечувствительности, чтобы они по ощущениям совпадали с мышью, но когда это было сделано, все прекрасно заработало. Это исправление можно увидеть в действии в таких играх, как Fallout: New Vegas или The Elder Scrolls: Skyrim.

Отбор игр для сенсорного управления

Разработчики Ideum потратили немало времени, настраивая виртуальные контроллеры для оптимального удобства в играх. Различные элементы игр определяют пригодность игры для Gameplay. Ниже приводятся общие правила, определяющие, какие типы игр хорошо работают с Gameplay.

Удобство использования Gameplay для разных типов игр

Хорошо

Лучше

Отлично

  • Ролевые игры (RPG)
  • Симуляторы
  • Боевые игры
  • Спорт
  • Гонки
  • Головоломки
  • Стратегии в реальном времени (RTS)
  • Шутеры с видом от третьего лица
  • Платформеры
  • Игры с боковой прокруткой
  • Приключенческие игры

Удобство игры — это важный фактор использования или отказа от использования Gameplay для этой игры, но самый важный фактор — это стабильность. Некоторые игры вообще не работают ни с подключением к управлению, ни с внедрением входных данных, ни с наложением. Это может происходить по разным причинам, но чаще всего сама игра отслеживает свое пространство в памяти или поток входных данных, чтобы избежать подмены данных. Программа Gameplay сама по себе является вполне безопасной и разрешенной, но она использует технологии, которые также применяются для вредоносных целей, поэтому, к сожалению, некоторые игры не будут работать с Gameplay, если в них нет встроенной поддержки сенсорного управления.

Отзывы пользователей

Хотя программа Gameplay 1.0 пока находится на довольно ранней стадии разработки, мы получили интересные отзывы пользователей в отношении сенсорного управления играми на ПК. В полученных отзывах уже можно проследить некоторые вполне ясные тенденции. Во-первых, ясно, что всем в целом нравится возможность настраивать сенсорный интерфейс в играх. Остальные отзывы касаются настройки интерфейса в играх в некоторых ключевых областях:

  • Многие виртуальные контроллеры не очень удобны для левшей. Именно это было изменено раньше всего во многих опубликованных виртуальных контроллерах.
  • Чаще всего пользователи изменяют размер кнопок и их расположение, поэтому Ideum рассматривает возможность добавления автоматической калибровки кнопок по размеру руки в будущей версии Gameplay.
  • Многие пользователи предпочитают использовать сенсорную прокрутку, а не дискретное касание и отпускание.

Мы ожидаем, что удастся выявить и другие тенденции по мере увеличения количества созданных виртуальных контроллеров.

Заключение

GestureWorks Gameplay привносит возможности сенсорного управления в ваши любимые игры. Для этого используется сочетание визуального наложения элементов управления и поддерживаются дополнительные способы взаимодействия, такие как жесты, акселерометры и переключение трансформеров в разные режимы работы. Наибольший интерес при работе над этим проектом представляют отзывы пользователей. Люди очень рады возможности играть на ПК с сенсорным управлением. Они с огромным удовольствием наслаждаются своими любимыми играми, применяя сенсорный экран.

Об авторах

Erik Nimeyer работает инженером по программному обеспечению в отделе Software and Solutions Group корпорации Intel. Эрик занимался оптимизацией производительности приложений на микропроцессорах Intel в течение почти 15 лет. Его специализация — разработка новых пользовательских интерфейсов и настройка на уровне микроархитектуры. В свободное от работы время он занимается альпинизмом. Связаться с ним можно по адресу erik.a.niemeyer@intel.com.

Chris Kirkpatrick — инженер по программному обеспечению в отделе Intel Software and Services Group. Он поддерживает графические решения Intel для мобильных платформ в группе Visual & Interactive Computing Engineering. Он является бакалавром компьютерных наук в Университете штата Орегон. Связаться с ним можно по адресу chris.kirkpatrick@intel.com.

Ресурсы

https://gameplay.gestureworks.com/

Дополнительные материалы

How to Write a 2-In-1 Aware Application: /en-us/articles/how-to-write-a-2-in-1aware-application
Krita Gemini Development of a 2-In-1 Aware Application with Dynamic UI for Laptop and Tablet Modes: /en-us/articles/krita-gemini-twice-as-nice-on-a-2-in-1
Detecting 2 in 1 Conversion Events & Screen Orientation in a 2 in 1 Device: /en-us/articles/detecting-slateclamshell-mode-screen-orientation-in-convertible-pc

Видео

Gestureworks Gameplay on an Ideum 46 Inch Multi-Touch Table

Pour de plus amples informations sur les optimisations de compilation, consultez notre Avertissement concernant les optimisations.