Управление браузером с геймпада
Современные геймпады работают на компьютерах через программный интерфейс XInput, который Microsoft разработала для поддержки контроллеров от Xbox в Windows. Через него же работают и геймпады сторонних производителей. До появления Xbox 360 в конце 2005 года в ходу был также стандарт DirectInput. Сейчас же он используется лишь в некоторых играх, которые поддерживают специфические контроллеры вроде джойстиков, рулей и штурвалов для симуляторов.
Эти стандарты не взаимозаменяемы. Они различаются тем, что XInput имеет фиксированное назначение кнопок, как в пультах от консолей Xbox, а DirectInput позволяет изменить и переназначить функции любой клавиши.
О совместимости в играх
Почти во всех современных играх, начиная с 2006 года, используется стандарт XInput. DirectInput встречается разве что в симуляторах. Поддержка API зависит от конкретной игры: если разработчики не реализовали её, геймпад несовместимого стандарта работать не будет (хотя его всё же можно использовать, об этом ниже).
В зависимости от модели и производителя игровые контроллеры могут поддерживать XInput или DirectInput. Некоторые геймпады совместимы с обоими стандартами — в них можно изменить режим работы с помощью специального переключателя или зажав определённую комбинацию клавиш.
Существуют специальные программы, которые позволяют превратить устройство DirectInput в XInput, а также имитировать нажатие клавиш на клавиатуре с помощью кнопок геймпада. В последнем случае можно играть на контроллере даже в те игры, которые изначально его не поддерживают.
Как подключить совместимый геймпад к ПК по USB
С проводными контроллерами всё предельно просто. Они имеют максимальную совместимость и почти гарантированно будут работать в Windows, macOS и Linux. Во всех ОС есть поддержка универсальных манипуляторов и встроенные драйверы. Это же справедливо для подключения беспроводных устройств по кабелю. Однако при таком способе некоторые их дополнительные функции могут быть недоступны.
Как подключить совместимый геймпад к ПК по Bluetooth
С беспроводными геймпадами есть нюансы. Чтобы всё заработало, контроллер в первую очередь должен быть совместим с ОС. Далее для подключения понадобится беспроводной адаптер из комплекта. В случае прямого подключения по Bluetooth данный протокол связи поддерживается самим компьютером — с помощью встроенного модуля или внешнего USB‑адаптера.
- Убедитесь, что Bluetooth на ПК включён.
- Активируйте на геймпаде режим обнаружения с помощью комбинации кнопок, указанной в инструкции. Например, для DualShock 4 от PlayStation 4 нужно удерживать Share и PS, пока световой индикатор не начнёт мигать.
- Откройте настройки Bluetooth на компьютере. В Windows зайдите в меню «Пуск», нажмите на шестерёнку, выберите «Устройства» → «Bluetooth и другие устройства» и затем «Добавление Bluetooth или другого устройства». В macOS — «Настройки» → Bluetooth. В Linux кликните по значку Bluetooth на панели задач, а потом по пункту «Добавить новое устройство…».
- Когда ПК обнаружит геймпад, кликните по нему в списке устройств, выберите «Добавить» или «Подключить» и дождитесь окончания сопряжения.
Как подключить несовместимый геймпад к ПК с помощью сторонних программ
Если ваш геймпад поддерживает только DirectInput и игра его попросту не видит, поможет программа TocaEdit X360 Controller Emulator, или коротко x360ce. Она умеет заменять команды ввода с DirectInput на XInput и превратит любой контроллер в совместимый.
x360ce работает почти в автоматическом режиме и самостоятельно распознаёт и переназначает кнопки. Достаточно подключить геймпад и следовать подсказкам.
Если геймпад вообще не поддерживается в игре, его всё равно можно заставить работать с помощью бесплатных утилит Enjoyable, InputMapper и AntiMicro, которые будут имитировать нажатие клавиш на клавиатуре и движения мыши с помощью игрового контроллера.
В зависимости от приложения интерфейс немного различается, но все они работают по одному принципу. После подключения геймпада необходимо выбрать его в списке устройств, а затем пройтись по всем кнопкам и назначить на них те клавиши, которые используются для управления в игре.
Если вы разрабатываете игры на HTML и JavaScript, то эта статья для вас. Мы уже много писали о том, что под Windows 8.x можно разрабатывать приложения на HTML/JS, причем, как правило, вы можете с легкостью просто взять и использовать ваш текущий движок, работающий в современных браузерах.
Просто в качестве примера: если вы делаете платформер, то вы можете воспользоваться таким движком, как Phaser (кстати, он поддерживает разработку на TypeScript!), или, нашим Platformer Game StarterKit для Windows 8. К слову, если вы хотите сделать игрушку в жанре Tower Defense, то у нас есть еще один Starter Kit. А если вы хотите создать что-то трехмерное с использованием WebGL, то наше все для вас – это Babylon.js.
GamePad
Но в этой статье я не буду рассказывать, как создать саму игру. Мы зададимся другим вопросом: как подключить к игре для Windows 8.x или в браузере геймпад? Например, игровой контроллер от Xbox 360 или Xbox One:
Будем считать, что вы уже подключили сам геймпад к своему ПК (инструкция для Xbox 360, инструкция для Xbox One). Теперь давайте разберемся, что вам нужно сделать, чтобы добавить его поддержку в своей игре.
В качестве примера я буду использовать платформер RubbaRabbit из приведенного выше стартет-кита. Мы рассмотрим два варианта: игра для Windows 8.x и игра в браузере.
Игра для Windows 8.x на HTML и JavaScript
Чтобы добавить поддержку геймпада в игру на JavaScript под Windows 8.x вам понадобится научиться работать с интерфейсами XInput. Это может звучать страшновато, потому что для этого нужно погрузиться в код на C++, но мы уже сделали практически все, что вам нужно, чтобы не пересекаться с ними напрямую.
Для работы вам нужно скачать пример XInput and JavaScript controller sketch. Внутри него вы легко найдете папочку с кодом на C++, в которой находится проект библиотеки-обвязки над XInput, с которой вы в свою очередь сможете работать в своей игре на JavaScript.
Этот проект вам нужно добавить в свой солюшн с игрой и добавить ссылку на него внутри проекта для Windows 8.x:
При желании вы можете залезть внутрь файлов на C++ и выяснить, что они фактически выставляют наружу очень простой интерфейс доступа к контроллеру: конструктор для получения ссылки на геймпад и функцию getState для получения его текущего состояния с проекцией на кнопки геймпада Xbox.
Теперь нужно добавить поддержку геймпада в самой игре. Для этого, обычно, нужно сделать довольно небольшие изменения в обработке ввода со стороны игрока.
Игровой цикл
Как правило, внутри кода игры у вас есть регулярный цикл, в рамках которого формируется каждый следующий кадр игры. Для того, чтобы понять, как изменилась игровая обстановка, вы в частности проверяете, нажал ли пользователь определенные кнопки.
В моем случае игровой цикл задается внутри функции update:
Где-то внутри этой функции есть обработка нажатий на кнопки, которая выглядит примерно так:
Как вы можете заметить, разработчики движка уже позаботились о том, что пользователь может передавать команды не только с разных кнопок с клавиатуры, но и, например, с виртуальных кнопок на сенсорном устройстве (переменные touchleft, touchright и т.п.).
В целом, скорее всего, в вашем коде должны быть какие-то переменные, отвечающие различным «игровым действиям» и аккумулирующие в себе различные способы ввода для их активации. Именно на работу с такими переменными и будет завязано добавление поддержки геймпада.
Поддержка геймпада
Чтобы добавить поддержку геймпада осталось совсем немного: нужно инициализировать работу с контроллером при старте игрушки и далее регулярно получать его состояние.
Для инициализации контроллера мы создаем объект Controller через конструктор, доступный нам из подключенной ранее библиотеки на C++:
Далее нам нужно с определенной периодичностью обновлять состояние контроллера, для этого опишем функцию updateState, которая будет запрашивать вызов себя на каждый кадр анимации:
Это весь(!) код, который необходимо добавить в игрушку, чтобы она научилась взаимодействовать с геймпадом от Xbox 360. Не забудьте только при старте вызвать саму функцию initXboxpad.
Обратите внимание, что в данном случае мы «эксплуатируем» уже существующие переменные, аккумулирующие в себе команды от возможного сенсорного интерфейса, и обновляем их в зависимости от того, каково текущее состояние элементов управления на геймпаде. Например, если игрок нажал кнопку «A», то соответствующее состояние state.a будет равно true и мы его проецируем на «прыжок» в игре.
Кстати, через функцию setState геймпада вы можете заставить его вибрировать.
Игра в браузере
Теперь давайте посмотрим, что мы можем сделать в браузере. Для браузеров в W3C разрабатывается специальный стандарт Gamepad API, который позволит единообразно работать с разными типами игровых геймпадов.
Стандарт предполагает, что есть некоторая «общая модель», к которой можно свести разные игровые контроллеры:
Если вы хотите привязать обозначения к конкретному типу устройства (например, геймпаду Xbox), вам это нужно будет сделать самостоятельно, прописав в своем коде соответствующее отображение.
В сам стандарт в этой статье погружаться не буду, благо в интернете уже есть достаточное количество обзорных статьей. Например, вот документация от Mozilla. Единственное, что хочу тут отметить – это то, что она устарела относительно предположения, что Gamepad API не поддерживает в Internet Explorer. На самом деле, в свежих сборках Internet Explorer 11 Gamepad API уже поддерживается.
В контексте данной статьи про стандарт нужно знать только одно: он предоставляет доступ к сырым данным, разбитым по осям и нумерованным кнопкам. Чтобы понять реальное соответствие, вам нужно будет проделать определенные умственные операции в своем коде.
Игровой цикл и код игры
Для демонстрации я продолжаю использовать тот же пример из стартер кита, только на этот раз создаю пустой веб-проект и копирую в него оригинальные исходные файлы. Так как они не имеют на самом деле никакой завязки на платформу Windows, то игра просто работает в браузере:
Все остальное пока остается неизменными, и верны те же самые предположения про игровой цикл, которые мы делали для проекта под Windows 8.
Поддержка геймпада
Чтобы упростить себе работу с геймпадом, я воспользуюсь готовым кодом из библиотеки Babylon.js – babylon.gamepads.ts (GitHub). Вы можете просто скопировать библиотеку себе или сделать ее форк.
- умеет поверх Gamepad API симулировать событийную модель (если вам вдруг нужно);
- упрощает доступ к отдельными элементами контроллера (например, объединяет оси джойстика в один объект);
- различает контроллер Xbox, делая необходимое мне отображение обобщенных кнопок на конкретные.
Не забудьте подключить библиотеку на страницу с игрой:
Далее схема подключения геймпада очень похожа на то, что мы делали в случае с Windows 8.x:
Внутрь функции BABYLON.Gamepads передается обработчик события подключения геймпада у компьютеру. Как видите, добавление в проект поддежки геймпада – это примерно 20 строчек кода!
Вариант кода с событийной моделью:
В результате мы легко можем управлять действиями героя в игре прямо с подключенного геймпада:
Brass Monkey — это игровая платформа, имеющая в своем составе браузер вашего десктопа и мобильное устройство под управлением Android или iOS. При этом окно браузера выполняет роль игровой консоли, а ваш мобильный телефон используется в качестве контроллера.
Работает эта система следующим образом.
1. Вы устанавливаете на свое мобильное устройство специальное приложение, ссылки на которое есть на домашней странице Brass Monkey.
2. Запускаете эту программу. Одновременно браузер обнаружит запуск приложения Brass Monkey на вашем мобильном устройстве и наладит с ним связь. После этого вы увидите на открытой странице браузера уведомление, что соединение установлено и название вашего устройства.
3. В окне программы Brass Monkey на мобильном делаем тап для активации связи телефона и браузера. Вот собственно и все, теперь можно управлять браузером со своего мобильного устройства.
4. Выбираем в окне браузера одну из нескольких десятков игр. Среди них присутствуют как простейшие «пиксельные» аркады, так и довольно интересные в графическом плане игры разных жанров.
Выбор игры на сайте Brass Monkey
5. После запуска игры ваш мобильный чудесным образом превращается в игровой контроллер, с помощью которого вы можете управлять происходящим на экране компьютера. При этом каждой игре соответствует своя, специально под нее заточенная конфигурация органов управления. Таким образом, вы получаете самый удобный джойстик, который можно себе представить.
Пример джойстика Brass Monkey Пример джойстика Brass Monkey
Но самое интересное начинается в тот момент, когда к вам придут гости и вы запустите одну из мультиплеерных игр. Разумеется, у игроков должны быть смартфоны под управлением Android или iPhone и им придется потратить пару минут на установку на них клиента Brass Monkey. Но после этого вы сможете устроить настоящее веселье в виде мультиплеерной битвы каких-нибудь скачущих обезьянок, самураев с мечами, гонок на машинках и так далее.
Мне показался Brass Monkey представляет несомненный интерес для любителей компьютерных развлечений. Прежде всего такого раньше никто не делал, насколько мне известно, и это уже вызывает уважение. К тому же возможность «из подручных средств» собрать удобную игровую консоль и устроить одиночную или мультиплеерную битву может привлечь многих любителей компьютерных игр. А если еще ассортимент доступных игр будет значительно расширен, то Brass Monkey ждет прекрасное будущее.
Все функции компьютерной мыши может выполнять геймпад. Зачем это нужно? Мышь может просто сломаться, у нее сядет батарейка в самый неподходящий момент или просто пользователю удобнее обходиться одним устройством. Рассказываем, как сделать мышь из геймпада.
Сначала самое простое – в онлайн-магазине Steam есть режим Big Picture, который позволяет пользоваться контроллером словно мышью. С помощью правого джойстика вы можете двигать курсором по экрану, а нажатие на триггер воспринимается как клик кнопкой мыши. Работает? Да. Однако эта функция действует, только если вы находитесь на экране магазина Steam.
Если геймпад исполняет функции мыши, то удобно с помощью одного устройства, например, свернуть окно или переключить настройки
А как управлять курсором на рабочем столе, например, когда понадобилось запустить фильм? И вновь обращаемся к сервисам – тот же Steam уже поддерживает различные геймпады, и комбинации клавиш на контроллере соответствуют различным функциям на ПК. Для включения этой функции необходимо:
- открыть главное окно Steam,
- перейти в « Настройки» — «Контроллер» — «Общие настройки контроллера»,
- выбрать свой контроллер (PlayStation, Xbox, Switch Pro или Generic), установив соответствующий флажок — теперь вы сможете перемещать мышь с помощью правого джойстика на геймпаде,
- на странице «Настройки» — «Контроллер» можно нажать пункт «Конфигурация рабочего стола», чтобы указать, какие кнопки будут имитировать конкретные клавиши клавиатуры.
2. Бесплатное ПО
Как известно, контроллеры DualShock от Sony, как и геймпады XBox, автоматически не распознаются ОС Windows. Так что для их использования можно установить бесплатные утилиты – Gopher 360, InputMapper, которые позволяют подключить геймпад к ПК.
3. Платное ПО
Если готовы заплатить 79 рублей, то лучше скачать утилиту Controller Companion — с помощью этой программы можно полностью настроить свой геймпад Xbox, заменив им клавиатуру и мышь — назначить необходимые клавиши и сочетания клавиш под любую игру, использовать его для быстрого набора текста и пр.
Читайте также: