Download PDF
Введение
Ноутбуки и планшеты чрезвычайно популярны в разных группах пользователей с разными демографическими характеристиками, поскольку эти устройства предоставляют пользователям специализированные возможности. Трансформеры возникли на стыке этих двух типоразмеров устройств и стали единой универсальной платформой, сочетающей удобства обоих режимов использования.
В этой статье мы рассматриваем важность разработки игр для трансформеров и улучшения пользовательского интерфейса:
- определение изменения режима ввода (сенсорный экран или клавиатура и мышь);
- предсказание режима (планшетный режим или режим ноутбука);
- отображение соответствующего пользовательского интерфейса
Типоразмеры устройств и их использование
Традиционные ноутбуки представляют собой мобильные персональные компьютеры с раскры¬вающимся наподобие морской ракушки корпусом. На таких устройствах можно выполнять практически все задачи, выполняемые на настольных ПК, но, по сравнению с настольными компьютерами, ноутбуки гораздо более компактны и мобильны. С появлением ультрабуков ноутбуки стали легче и тоньше, они получили возможность дольше работать от аккумуляторов при возросшей производительности и функциональности. Для многих пользователей ноутбуки стали предпочитаемыми компьютерными устройствами: на ноутбуке пользователь может делать все то же самое, что и на настольном ПК, с дополнительными удобствами, какими является мобильность и гибкость.
В них используется сенсорный ввод на основе распознавания рукописного ввода или экранной сенсорной клавиатуры (впрочем, можно подключить и обычную внешнюю клавиатуру). Планшеты исключительно компактны и легки, их очень удобно носить с собой. Тем не менее по вычислительной мощности планшеты существенно уступают ноутбукам; функциональность планшетов как вычислительных устройств в значительной мере ограниченна. Планшеты прекрасно подходят для обычных пользователей Интернета, которые, главным образом, читают новости и просматривают популярные веб-сайты, играют в несложные игры или же смотрят телепередачи и кинофильмы в поездках. Кроме того, планшетами довольно часто пользуются представители творческих профессий, такие как дизайнеры и создатели музыки. [1]
Проблема двух устройств
Одна из проблем использования двух устройств (ноутбука для создания содержимого и планшета для потребления содержимого) состоит в сложности создания общего контента для устройств с разными операционными системами и форматами содержимого. Трансформеры успешно решают эту проблему, обеспечивая удобства обоих типов устройств в одном устройстве с одной ОС.
![]()
Рисунок 1. Evolution of Computing Devices
Типы устройств-трансформеров
Существует несколько типов трансформеров. У некоторых из них экран вращается на шарнире, у других складывается на 180°, а у некоторых полностью отстыковывается. Во всех случаях есть одна важная общая черта — возможность быстро и без нарушения работы перейти из режима ноутбука в режим планшета и обратно. Итак, вот эти два режима: планшет (физическая клавиатура в этом режиме отсутствует или не используется, а основным средством ввода является сенсорный экран) и ноутбук (основные средства ввода — клавиатура, мышь, сенсорная панель).
![]()
Рисунок 2.Некоторые типы трансформеров, доступных на рынке в настоящее время.
Любое программное обеспечение, работающее на этих устройствах, должно быть способно определить типоразмер устройства и изменить пользовательский интерфейс в зависимости от состояния устройства. Например, если программа определяет, что используется сенсорный ввод, она должна автоматически предоставлять возможность использования экранной клавиатуры.
Адаптация трансформеров для игр
Все игры можно разделить на две категории: (1) традиционные игры для ПК, для управления которыми используется мышь, клавиатура или игровые контроллеры; (2) игры для мобильных устройств с сенсорным управлением. Поскольку на трансформерах можно запускать и те, и другие игры, важно понять, как игра будет адаптироваться при изменении пользователем режима работы устройства. Это может произойти в любой момент, даже в процессе игры.
Особенности трансформеров как игровой платформы
Сенсорный режим
Сенсорное управление — новый режим, к которому нужно адаптировать традиционные игры. Сенсорное управление доступно и в режиме планшета, и в режиме ноутбука, но наличие сенсорного интерфейса не всегда означает, что необходимо менять средства управления игрой. Сенсорное управление можно использовать для расширения игровых возможностей, поскольку такой способ управления в ряде случаев является более интуитивным. Тем не менее, при добавлении поддержки сенсорного управления следует помнить о некоторых особенностях.
Устройство пользовательского интерфейса
Любой сенсорный пользовательский интерфейс должен соответствовать правилам проектирования игр для планшетов. Например, важно, чтобы сенсорные кнопки были достаточно крупными и имели промежутки между собой в соответствии со средним размером пальца взрослого человека. Кроме того, важно, чтобы кнопки и формы немедленно реагировали на пользовательский ввод. Помните, что, когда устройство находится в режиме планшета, весьма высока вероятность, что пользователь держит устройство двумя руками. Если спроектировать элементы управления так, чтобы они находились рядом с местами, за которые обычно пользователи держат устройство, игра будет удобной в использовании: пользователю не потребуется удерживать устройство одной рукой, чтобы другой нажать на кнопку в середине экрана. [2]
![]()
Рисунок 3. См. http://msdn.microsoft.com/en-us/library/windows/apps/hh465415.aspx
Гладкое изменение пользовательского интерфейса
Разница между традиционным планшетом или ноутбуком и трансформером состоит в том, что пользователь может по своему желанию переключаться между двумя режимами. Когда изменение форм-фактора происходит во время игры, важно его обнаружить и предоставить новый интерфейс, адаптированный для нового режима.
Например, в игре Defense Grid: The Awakening такой переход реализован очень удобно. [3]Когда игра обнаруживает сенсорный ввод, она отображает планшетный интерфейс. Пользовательский интерфейс содержит расположенный у правого края экрана столбец, в котором удобно выбирать кнопки, находящуюся рядом кнопку настроек и игрового меню, а также кнопку быстрой прокрутки в левом нижнем углу экрана. Элементы пользовательского интерфейса расположены рядом с местами, за которые пользователь держит планшет, как показано выше. Когда игра обнаруживает ввод с клавиатуры, мыши или сенсорной панели, элементы сенсорного интерфейса исчезают, отображается указатель мыши. Благодаря этому переключение между состояниями происходит очень естественным и ненавязчивым образом.
![]() | ![]() |
Рисунок 4.Элементы планшетного пользовательского интерфейса при обнаружении сенсорного ввода. | Рисунок 5.При вводе с клавиатуры или мыши элементы сенсорного интерфейса исчезают, появляется указатель мыши. |
На некоторых устройствах можно опрашивать систему через функциональность API Windows* и определять состояние устройства (ноутбук или планшет). Но это решение реализовано не на всех платформах, его наличие на старых трансформерах не гарантируется.
Кроме того, могут возникнуть ситуации (хотя и не так часто), когда нам нужно изменить интерфейс, не дожидаясь действий пользователя. Если пользователь складывает ноутбук и переключается в планшетный режим, имеет смысл отобразить планшетный интерфейс, не требуя, чтобы пользователь прикоснулся к экрану. Это важно в играх, где случайное касание может повлиять на игровой процесс. Этот фактор можно устранить, введя «особое условие» для первого касания после использования клавиатуры и мыши (можно ввести условие, при котором это касание не будет считаться указанием на изменение режима управления игрой), но желание автоматически переключать режим игры вполне закономерно.
GetSystemMetrics
- это API Windows для опроса состояния устройства. [4]Соответствующие метрики - SM_CONVERTIBLESLATEMODE
и SM_SYSTEMDOCKED
. Опрос SM_CONVERTIBLESLATEMODE
позволяет определить режим работы устройства (режим планшета или режим ноутбука). [5]
bool bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0);
Фрагмент кода 1: НЕ ИСПОЛЬЗОВАТЬ! Этот API может возвращать неверное состояние в некоторых системах. См. ниже.
При изменении этой метрики системы она отправляет сообщение WM_SETTINGCHANGE
со значением “ConvertibleSlateMode” в разделе LPARAM
.
case WM_SETTINGCHANGE:
if(wcscmp(TEXT("ConvertibleSlateMode"), (TCHAR *) lParam) == 0)
NotifySlateModeChange();
break;
Фрагмент кода 2: Используйте этот механизм. В данном случае сообщение отправляется только при фактическом изменении режима.
Помните, что в некоторых системах эта функциональность может быть недоступна. Не существует простого способа определения этой функциональности API приложением. Это означает, что вызов GetSystemMetrics()
может вернуть неверное состояние. На старых устройствах вызов может вернуть значение 0, указывающее на режим планшета, тогда как на самом деле устройство при этом будет работать в режиме ноутбука.
Сообщение WM_SETTINGCHANGE
со значением LPARAM
ConvertibleSlateMode или SystemDockMode будет разослано, только если эта функция поддерживается. Если игра обнаруживает эти сообщения, она может правильно предоставить пользователю нужный интерфейс. Поскольку эта функция поддерживается не во всех случаях, важно переключать интерфейс на основе изменения пользовательского ввода (сенсорный ввод или ввод с клавиатуры).
Экранная клавиатура
В некоторых случаях физическая клавиатура может быть недоступна. Если в игре требуется ввод текста, важно реализовать поддержку экранной клавиатуры.
Если игра запускается в окне, то пользователь может вручную вызвать экранную клавиатуру на панели задач, но такой подход нельзя назвать интуитивным; кроме того, этот подход непригоден для полноэкранных игр. Для игры можно написать собственную клавиатуру. Это может быть непросто, но зато пользователь получает наибольшее удобство.
![]() | ![]() |
Рисунок 6.Экранная клавиатура с фиксированным размером и расположением. | Рисунок 7.Экранная клавиатура, размер и расположение которой можно изменять . |
В следующем примере кода показано, как вызвать экранную клавиатуру Windows в игре DirectX: https://software.intel.com/en-us/blogs/2013/06/11/touch-keyboard-access-for-windows-8-desktop-apps [6]Для этого подхода требуется, чтобы игра была запущена в режиме развернутого на весь экран окна без рамки. Множество игр для настольных ПК создаются для монопольного полноэкранного режима. Это затрудняет использование встроенных клавиатур: либо вызванная клавиатура останется скрытой, либо она появится на экране, но заставит выйти игру из полноэкранного режима. Переход в полноэкранный монопольный режим и из этого режима связан с получением и высвобождением значительного объема ресурсов, а также с проблемой изменения размера окон. Как правило, это серьезные затруднения, совершенно излишние для обработки клавиатурного ввода. В решении, показанном в этом примере, игра запускается не в монопольном полноэкранном режиме, а в развернутом на весь экран окне без рамки. Преимущество такого подхода состоит в том, что появляющаяся на экране клавиатура никак не мешает игре: просто экран игры сдвигается на один уровень вниз в наборе z-уровней глубины. Игра продолжает выполняться в фоновом режиме, чтобы обрабатывать ввод с клавиатуры, и автоматически снова получает фокус после закрытия клавиатуры.
Автоматический поворот/блокировка ориентации
Все трансформеры оборудованы различными датчиками. Это позволяет воспользоваться функцией автоматического поворота. В планшетном режиме устройство может использоваться в книжной или в альбомной ориентации. Если включен автоматический поворот, игра на основе DirectX потеряет свое устройство D3D, ей потребуется заново создать новое устройство с новым разрешением изображения (с учетом изменения ориентации). Например, разрешение экрана может измениться с 1600x900 на 900x1600. Для полноэкранных игр это нежелательно. В приложениях для современного интерфейса Windows эту проблему несложно устранить: достаточно указать параметры ориентации в манифесте приложения. Для игр с классическим интерфейсом можно получить эту функциональность путем прямого отслеживания и вызова экспортированной функции в user32.dll. Эту функцию можно будет использовать для отключения автоматического поворота в настройках ориентации игры. [7]
typedef enum ORIENTATION_PREFERENCE
{
ORIENTATION_PREFERENCE_NONE = 0x0,
ORIENTATION_PREFERENCE_LANDSCAPE = 0x1,
ORIENTATION_PREFERENCE_PORTRAIT = 0x2,
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,
ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8
} ORIENTATION_PREFERENCE;
typedef BOOL (WINAPI *pSDARP)(ORIENTATION_PREFERENCE orientation);
pSDARP pARP;
pARP = (pSDARP) GetProcAddress( GetModuleHandle(TEXT("user32.dll")),"SetDisplayAutoRotationPreferences" );
if( pARP )
{
pARP( (ORIENTATION_PREFERENCE)(ORIENTATION_PREFERENCE_LANDSCAPE |
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED) );
}
Фрагмент кода 3. Фрагмент кода с отключением автоматического поворота и выбором только альбомной ориентации.
Сенсорные жесты
Сенсорные жесты делают игровой процесс более интуитивным. В зависимости от типа игры сенсорное управление может быть более интуитивным, чем управление с помощью клавиатуры и мыши. Например, в игре жанра «стратегия в реальном времени» (RTS) сенсорное управление дает пользователю возможность обводить игровые единицы на экране, чтобы выбирать их. После этого можно скомандовать этим единицам перейти в нужное место, коснувшись мини-карты или изменив масштаб основной карты и выбрав место, которое до этого находилось за границей экрана. Кроме того, в играх RTS пользователь может выбрать игровые единицы и прочертить по экрану определенный маршрут для патрулирования. Такие команды трудно представить себе наглядно и непросто реализовать в традиционных системах ввода, но в сенсорном режиме все значительно проще.
![]()
Рисунок 8.В игре Civilization V были добавлены сенсорные элементы для удобного сенсорного управления игрой.
Мультисенсорный ввод позволяет добавить множество команд в простой интерфейс. Например, в игре Civilization V используются следующие сенсорные элементы управления[8]:
- Сведение и разведение пальцев — приближение и удаление камеры
- Перетаскивание — отображение информации об игровой единице или об участке земли, над которым проходит палец
- Прокрутка двумя пальцами — перемещение камеры выше или ниже, левее или правее
- Касание — выбор игровой единицы
- Двойное касание — команда на перемещение выбранной игровой единицы
- Касание двумя пальцами — выход из текущей команды без отдачи приказа
- Касание тремя пальцами — закрытие открытых меню или открытие игрового меню
Поскольку сенсорное управление доступно и в режиме ноутбука, эти новые жесты дополняют традиционные интерфейсы и повышают удобство пользователей.
Выбор сенсорных API
В классических приложениях для Microsoft Windows 8 поддержку сенсорного ввода и жестов можно реализовать тремя способами: с помощью сообщений WM_POINTER
, WM_GESTURE
или WM_TOUCH
messages. [9]
WM_POINTER
— самый простой для написания код, поддерживается самый широкий набор жестов, но поддерживается только операционная система Windows 8 и более поздние версии.- Для
WM_GESTURE
несложно писать код; поддерживается обратная совместимость с Windows 7, но накладывается ряд ограничений. WM_TOUCH
тоже обратно совместим с Windows 7, но требует создания наибольшего объема кода, поскольку требуется написать собственные алгоритмы распознавания жестов и манипуляций на основе низкоуровневых сенсорных событий.
В зависимости от нужного уровня абстракции, если вы предпочитаете полный контроль, то можете выбрать WM_TOUCH
, а не WM_POINTER
или WM_GESTURE
, хотя при этом придется создать гораздо больше кода. WM_GESTURE
может быть оптимальным, если вам удастся уложиться в ограничения этого метода.
![]()
Рисунок 9. Сравнение сенсорных API Windows.
Вот ссылка на пример кода, где показана интеграция сенсорного управления в приложении с помощью API WM_GESTURE
и WM_TOUCH
: https://software.intel.com/en-us/vcsource/samples/windows-7-touch [10]
Упаковка в Unity 3D
Некоторые версии движка Unity 3D не обрабатывают сообщения касания в приложениях, работающих под управлением Windows 7 и классического интерфейса Windows 8. Движок Unity сам по себе не занимается обработкой сообщений касания, но можно зарегистрировать окно Unity для касаний с помощью подключаемого модуля. Проблема в том, чтобы создать подключаемый модуль, использующий разные API Windows для перехвата сообщений касания, отправляемых в приложения. После регистрации окна подключаемый модуль предоставляет доступ к сообщениям касания в сценарии приложения Unity. Образец кода этого подключаемого модуля см. здесь: https://software.intel.com/en-us/articles/adding-multi-touch-support-to-unity-games-on-microsoft-windows-7-and-windows-8-desktop [11]
Сравнение задержек устройств ввода
![]()
Рисунок 10.Описание полного набора программных и аппаратных компонентов, влияющих на задержки реагирования при сенсорном управлении.
В зависимости от устройства длительность задержки может составлять 50—100 мс, но этот показатель постоянно улучшается [12].Под задержкой подразумевается время между распознаванием ввода (путем касания) и отображением на экране соответствующего эффекта. Она не сильно отличается от задержки при традиционном вводе с помощью мыши или сенсорной панели. Аппаратная задержка обычной мыши составляет около 8 мс, но к этому нужно добавить задержку программных компонентов.
Если в игре важна быстрая и точная реакция, то сенсорное управление для такой игры непригодно. Тем не менее, сенсорное управление можно использовать, чтобы дополнить обычные элементы управления.
Режим вспомогательного приложения
Даже если игра требует скорости и точности в управлении, а потому непригодна для адаптации к полностью сенсорному управлению на планшете, даже в такой игре могут быть элементы, удобные в сенсорном режиме. Например, игра может включать планирование и настройку персонажей, просмотр и публикацию сохраненных результатов и повторов, просмотр и социальное взаимодействие с друзьями, также играющими в эту игру, упорядочение инвентаря, сортировку заданий и т. п. Такие элементы будут прекрасно работать на планшетах с сенсорным управлением.
Выделение этих элементов игры и добавление вспомогательного приложения для планшетного режима сделает игру более удобной для пользователей.
Другие важные факторы
Учебные материалы или справочное окно в игре должны работать в правильном режиме (сенсорный/клавиатура/контроллер) в зависимости от текущего режима устройства. Если возможно, лучше отображать информацию и о сенсорном режиме, и о режиме клавиатуры и мыши, чтобы пользователь мог переходить из одного режима в другой, не открывая справку для изучения элементов управления.
Добавление уникальных достижений, доступных только в сенсорном режиме, расширит игровые возможности и будет способствовать тому, что традиционные игроки будут охотнее осваивать новые сенсорные возможности.
Об авторе
Дорайсами Ганешкумар (Doraisamy Ganeshkumar) — старший инженер по программному обеспечению в отделе Intel Developer Relations. Он помогает разработчикам игр для ПК оптимизировать свои игры для продукции Intel. В нерабочее время ему нравится кататься на велосипеде, гулять, заниматься столярным ремеслом и сооружать различные технические приспособления.
Справочные материалы
[1]Ноутбуки и планшеты: достоинства и недостатки: http://www.lenovo.com/us/en/faqs/laptop-vs-tablet/
[2]Сенсорное взаимодействие в Windows: http://msdn.microsoft.com/en-us/library/windows/apps/hh465415.aspx
[3]Создание высококачественного сенсорного интерфейса для игры Defense Grid: The Awakening: https://software.intel.com/en-us/articles/creating-a-first-class-touch-interface-for-defense-grid-the-awakening
[4]Библиотека API Windows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx
[5]Обнаружение режимов планшета и ноутбука, а также ориентации экрана на трансформерах: https://software.intel.com/en-us/articles/detecting-slateclamshell-mode-screen-orientation-in-convertible-pc
[6]Использование сенсорной клавиатуры в классических приложениях для Windows* 8: https://software.intel.com/en-us/blogs/2013/06/11/touch-keyboard-access-for-windows-8-desktop-apps
[7]Обработка функции автоматического поворота Windows 8 в приложениях: https://software.intel.com/en-us/blogs/2013/01/10/handling-windows-8-auto-rotate-feature-in-your-application
[8]Новая платформа для гиганта игровой отрасли: компания Firaxis выходит на мобильный рынок, оптимизируя игру Civilization V* для ультрабуков с сенсорным экраном: http://www.intel.com/content/www/us/en/gaming/firaxis-civ-v.html
[9]Сравнение методик написания кода для обработки сенсорного ввода — образец классического приложения для Windows 8: https://software.intel.com/en-us/articles/comparing-touch-coding-techniques-windows-8-desktop-touch-sample
[10]Сенсорный ввод в классических приложениях для Windows: https://software.intel.com/en-us/vcsource/samples/windows-7-touch
[11]Добавление поддержки мультисенсорного ввода в игры Unity* для Microsoft Windows* 7 и классического интерфейса Windows* 8: https://software.intel.com/en-us/articles/adding-multi-touch-support-to-unity-games-on-microsoft-windows-7-and-windows-8-desktop
[12]Измерение реакции на сенсорный ввод, анализ и оптимизация для приложений Windows*: https://software.intel.com/en-us/articles/touch-response-measurement-analysis-and-optimization-for-windows-applications