Adobe AIR デスクトップ アプリの GameInput API に少し問題があるため、この質問を投稿しています。テストアプリで API をテストしたところ、問題なく動作しました。ただし、実際のアプリ (ゲーム) に追加すると、起動時にトリガーされなくなります。
他のすべてが機能し、コントローラーを切断/再接続すると、すべて正常に機能します。ただし、コールバック関数の最初のトリガーは機能しなくなりました。
理由はありますか?これが私がすることです:
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);
}
フォーカスの問題か何かに関連している可能性があると推測していますが、なぜこれが起こるのか本当にわかりません. 私のアプリは次のようになります: コア(swf から呼び出され、アプリ全体を管理するクラス)
画面(ゲーム、オプション画面など、ムービークリップを継承するが内部にロジックを持つさまざまなクラス)
Gameinput API の初期化は、オブジェクトのインスタンス化 (Event.ADDED_TO_STAGE を使用) の後、コアで行われます。