現在バージョンは0.0.1です。
OUYAControllerManager.ane ( MIT License )
OUYAコンテンツをAdobeAIRで作る際に、コントローラの実装が結構大変です。
最近のAIRはGameInputAPIなるものが出てて、ゲームコントローラーをFlash/AIRで扱えるようになりました。しかし、このGameInputAPIをOUYAで扱おうとすると、いろいろ不都合が発生してしまいます。
その最たるものが「OUYA側で認識されているプレイヤー番号がAdobeAIRで取得できない」というものです。これは現在のGameInputAPIの仕様上どうしようも無い模様です。
しかし、OUYAから提供されている「ODK ( OUYA Development Kit )」であれば、プレイヤー番号をちゃんと取得する事が出来ます。
そんな訳でODKをラッピングした「OUYAControllerManager」を作成しました。この特徴は以下です。
- プレイヤー番号をOUYAと同期できる
- SystemButtonとTouchPadを、コントローラー毎に認識できる
なお、注意点は以下となります。
- まだ開発中です。大幅に仕様が変わる可能性もあります。
- このライブラリの中には、一部使用されていないクラスがあります。(ゲームパッドのキャッシュ関連)
- 後に述べる「推奨するコード例」を参考にし、それ以外の使用法は避けてください。
このANEを利用したドキュメントクラスは以下です。
package { import flash.display.Sprite; import flash.events.Event; import jp.hiiragi.ane.ouya.OUYAController; import jp.hiiragi.ane.ouya.OUYAControllerManager; import jp.hiiragi.ane.ouya.constants.OUYAControllerButtonType; import jp.hiiragi.ane.ouya.events.OUYAControllerManagerEvent; import jp.hiiragi.ane.ouya.events.OUYAControllerTouchEvent; [SWF(width="1920", height="1080", frameRate="60")] public class OUYAControllerANE_APP extends Sprite { private var _ouyaControllerManager:OUYAControllerManager; public function OUYAControllerANE_APP() { super(); _ouyaControllerManager = OUYAControllerManager.getInstance(); _ouyaControllerManager.initialize(this.stage); _ouyaControllerManager.addEventListener(OUYAControllerManagerEvent.DEVICE_ADDED, deviceAddedHandler); _ouyaControllerManager.addEventListener(OUYAControllerManagerEvent.DEVICE_REMOVED, deviceRemovedHandler); _ouyaControllerManager.addEventListener(OUYAControllerTouchEvent.TOUCH_DOWN, touchHandler); _ouyaControllerManager.addEventListener(OUYAControllerTouchEvent.TOUCH_MOVE, touchHandler); _ouyaControllerManager.addEventListener(OUYAControllerTouchEvent.TOUCH_UP, touchHandler); this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler); } protected function onEnterFrameHandler(event:Event):void { for (var i:int = 0; i < _ouyaControllerManager.ouyaControllers.length; i++) { var controller:OUYAController = _ouyaControllerManager.ouyaControllers[i]; if (controller != null) { // GamePad Button trace(controller.getControl(OUYAControllerButtonType.DPAD_UP).value); // SystemButton trace(controller.getSystemButton().value); } } } protected function touchHandler(event:OUYAControllerTouchEvent):void { trace(event); if (event.type == OUYAControllerTouchEvent.TOUCH_DOWN) { } else if (event.type == OUYAControllerTouchEvent.TOUCH_MOVE) { } else if (event.type == OUYAControllerTouchEvent.TOUCH_UP) { } } protected function deviceAddedHandler(event:OUYAControllerManagerEvent):void { trace("device added."); trace(event); } protected function deviceRemovedHandler(event:OUYAControllerManagerEvent):void { trace("device removed."); trace(event); } } }