
Игровые контроллеры
1
Вдруг кто еще не знает — Flash Player, начиная с версии 11.7, поддерживает игровые контроллеры. То есть можно поиграть на геймпаде прямо в браузере. Можно подключить сразу несколько.

Повибрировать геймпадом к сожалению пока нельзя. И встраивать в игру стоит только если уверены, что игроки обновились до версии 11.7.
Ниже пример кода для работы с контроллерами
Пояснения к коду
control.id — название кнопки
control.value — значение кнопки. Например на геймпаде Xbox кнопки A, B, X, Y могут принимать значения 0 или 1 (нажата или не нажата). Кнопки RT и LT могут принимать значения в диапазоне от 0 до 1. Левый и правый стики состоят каждый из трех кнопок — положение по оси X, положение по оси Y и нажатие на сам стик.
На каждую кнопку нужно вешать обработчик событий.
control.addEventListener(Event.CHANGE, controlChange);
Внимание! gameInput нельзя делать локальной переменной. В этом случае её похоже съедает сборщик мусора.
Рекомендую статью
www.adobe.com/devnet/air/articles/game-controllers-on-air.html

Повибрировать геймпадом к сожалению пока нельзя. И встраивать в игру стоит только если уверены, что игроки обновились до версии 11.7.
Ниже пример кода для работы с контроллерами
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.GameInputEvent;
import flash.ui.GameInput;
import flash.ui.GameInputControl;
import flash.ui.GameInputDevice;
public class Main extends Sprite
{
private var gameInput:GameInput;
public function Main():void
{
gameInput = new GameInput();
gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, deviceAdded);
gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, deviceRemoved);
}
private function deviceAdded(e:GameInputEvent):void
{
var device:GameInputDevice = e.device;
device.enabled = true;
for (var i:Number = 0; i < device.numControls; i++)
{
var control:GameInputControl = device.getControlAt(i);
control.addEventListener(Event.CHANGE, controlChange);
}
}
private function controlChange(e:Event):void
{
var control:GameInputControl = GameInputControl(e.target);
trace(control.id, control.value);
}
private function deviceRemoved(e:GameInputEvent):void
{
trace("Device is removed");
}
}
}
Пояснения к коду
control.id — название кнопки
control.value — значение кнопки. Например на геймпаде Xbox кнопки A, B, X, Y могут принимать значения 0 или 1 (нажата или не нажата). Кнопки RT и LT могут принимать значения в диапазоне от 0 до 1. Левый и правый стики состоят каждый из трех кнопок — положение по оси X, положение по оси Y и нажатие на сам стик.
На каждую кнопку нужно вешать обработчик событий.
control.addEventListener(Event.CHANGE, controlChange);
Внимание! gameInput нельзя делать локальной переменной. В этом случае её похоже съедает сборщик мусора.
Рекомендую статью
www.adobe.com/devnet/air/articles/game-controllers-on-air.html
- +7
- AndreSokolov
Комментарии (8)
За статью спасибо
Проблема была, насколько я знаю, в различии XBox-геймпадов от других – смещение некоторых кнопок.
Кстати, китайские геймпады будут работать? У Карлова была как-то статья, что на старте этой фишки работали только геймпады от Microsoft.
В общем, насколько распространены геймпады у PC-игроков? А то у меня сомнения, стоит ли вообще дрыгаться по поводу контроллеров в обычном флэше.
Игры со Стима сейчас тоже многие заточены именно под использование мыши с клавиатурой. Пытался настроить для пары игр, но там фигурировал XBox'овский джойстик. Мой обычный китайский SpeedLink не пошёл. Хотя может быть можно как-то через Joy2Key переназначить…
А на эмуляторах да, отлично. Иногда сам поигрываю в Денди )
Идея делать на эйре флайтсим для десктопа, играющий строго с палочного джоя с офигенной супер-пупер современной графикой — восхитительна в своей странности :)
Сейчас хочу себе новый, жду Steam Controller.