OUYAControllerManager

投稿者: | 2013/09/16

現在バージョンは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);
 }
 }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です