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