2015-07-16 6 views
0

Я отправляю этот вопрос, потому что у меня небольшая проблема с API GameInput в adobe AIR desktop app. Я тестировал API в тестовом приложении, и он работал отлично. Однако, когда я добавил его в свое настоящее приложение (игру), он больше не запускается при запуске.GameInput.DEVICE_ADDED не запускается при запуске приложения

Все остальное работает, и если я отсоединяю/снова подключаю контроллер, все работает нормально. Однако начальный триггер функции обратного вызова больше не работает.

Любая идея, почему? Вот что я делаю:

 if (GameInput.isSupported) //GAMEPADS SUPPORT 
     { 
      gameInput = new GameInput(); 
      gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, controllerAdded); 
      gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, controllerRemoved); 
      gameInput.addEventListener(GameInputEvent.DEVICE_UNUSABLE, controllerProblem); 
     }       //GAMEPAD SUPPORT 

    public function controllerAdded(e:GameInputEvent):void 
    { 
     var vec:Vector.<String> = new Vector.<String>(); 

     gamepad = GameInput.getDeviceAt(0); 
     vec[0] = gamepad.getControlAt(0).id; 
     gamepad.enabled = true; 
     gamepad.sampleInterval = 10; 
     gamepad.startCachingSamples(5, vec); // numSamples = 5 
     for (var i:int = 0; i < gamepad.numControls; ++i) 
      gamepad.getControlAt(i).addEventListener(Event.CHANGE, handleChangeEvent); 
    } 

Я предполагаю, что это может быть проблемой фокусировки или что-то связаны, но я действительно не понимаю, почему это происходит. Мое приложение выглядит следующим образом: Ядро (класс под названием от ФНБ и управляет всем приложение)

Экраны (разные классы, наследуемые мувик, но имеют логику внутри, такие как игры, optionscreen и т.д.)

Инициализация Gameinput выполняется в ядре после инстанцирования объекта (с использованием Event.ADDED_TO_STAGE).

ответ

0

Ну, похоже, API-интерфейс GameInput Adobe слишком неустойчив.

Я решил использовать AirControl вместо этого, и он работает намного лучше ... Поэтому я закрываю этот вопрос.

0

Класс GameInputEvent представляет собой событие, которое отправляется, когда устройство ввода игры либо было добавлено или удалено из платформы приложений

Так что, если вы запустите приложение и Allready иметь устройство, ни одно событие не будет который звучит как ваша проблема. Почему бы вам просто не проверять устройства во время иналинизации, а затем работать с ними в этот момент?

if (GameInput.isSupported) //GAMEPADS SUPPORT 
{ 
    gameInput = new GameInput(); 
    gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, controllerAdded); 
    gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, controllerRemoved); 
    gameInput.addEventListener(GameInputEvent.DEVICE_UNUSABLE, controllerProblem); 
    if(GameInput.numDevices > 0) { 
     /*enter code here/* 
    } 
}  
+0

Нет, это не работает. Если устройство было подключено до запуска и не доступно сразу, событие DEVICE_ADDED будет отправлено, когда устройство станет доступным для использования. Как я уже сказал, у меня не было проблем с другим приложением, в котором я тестировал это. Моя проблема исходит из чего-то другого, кроме самого API, но я не вижу, что это такое. Я, очевидно, не могу опубликовать весь код для приложения здесь, так как у меня есть более 100 файлов, а некоторые из них - 1000 строк. XD Что я хотя, был тест numDevices, и это 0 в обоих приложениях. На «рабочий» он отправляет события для уже подключенных контроллеров. –

Смежные вопросы