まず JoyServer をインストールします。
インストールできたら、ActionSciript 3 用の SWC ライブラリをダウンロードして、プログラムの中から JoyServer の機能を呼び出します。
ドキュメント
Flash 側のソースコードの例はこのページの一番下にあります。
まず JoyServer をインストールします。
インストールできたら、ActionSciript 3 用の SWC ライブラリをダウンロードして、プログラムの中から JoyServer の機能を呼び出します。
ドキュメント
Flash 側のソースコードの例はこのページの一番下にあります。
JoyServer のインストール後、この画面で直接ジョイスティックの動作確認をすることができます。
アナログの方向キーは -100 から 100 の値で状態を取得できます。
今のところアナログボタンには対応していません。
JoyServer を動作させる時は、 .NET Framework 2.0 が必要です。
Vista か 7 をお使いの場合は OS 自体に入っていると思います。
ジョイスティック対応 Flash の開発はソースコード無しでもできますが、より詳しく動作内容を確認したい方はダウンロードしてみてください。
ソースコードは Google Code に置いてあります。
サーバ側・クライアント側の両方のソースコードを MIT ライセンスで公開します。
The MIT License
Copyright (c) 2009 hikipuro
以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。
上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。
ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import joystick.events.JoyClientEvent;
import joystick.JoyClient;
import joystick.JoystickState;
/**
* JoyServer への接続テスト
*/
public class Main extends Sprite
{
/**
* ジョイスティック読み取りクライアント
*/
private var joyClient:JoyClient;
/**
* ジョイスティックの状態
*/
private var joystickState:JoystickState;
/**
* 状態表示用テキストフィールド
*/
private var textField:TextField;
/**
* コンストラクタ
*/
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
/**
* 初期化メソッド
* @param e
*/
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
// ジョイスティック読み取りクライアントを準備
joyClient = new JoyClient();
// true にすると詳細なメッセージがデバッグ画面に出ます。
joyClient.debug = true;
// ジョイスティッククライアントのイベントハンドラ登録
joyClient.addEventListener(JoyClientEvent.CONNECTED, onJoyClientConnected);
joyClient.addEventListener(JoyClientEvent.IO_ERROR, onJoyClientError);
joyClient.addEventListener(JoyClientEvent.SECURITY_ERROR, onJoyClientError);
joyClient.addEventListener(JoyClientEvent.PACKET_RECEIVED, onJoyClientReceive);
// 接続開始
joyClient.connect();
// 状態表示用テキストフィールドの準備
textField = new TextField();
textField.autoSize = TextFieldAutoSize.LEFT;
textField.x = 10;
textField.y = 10;
addChild(textField);
// Main のイベントハンドラ登録
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
/**
* 接続完了時
* @param e
*/
private function onJoyClientConnected(e:JoyClientEvent):void
{
trace("接続完了");
}
/**
* 接続エラー時
* @param e
*/
private function onJoyClientError(e:JoyClientEvent):void
{
trace("接続エラー");
}
/**
* ジョイスティックの状態データ読み取り完了時のイベント
* @param e
*/
private function onJoyClientReceive(e:JoyClientEvent):void
{
// イベントオブジェクトの中からジョイスティックデータを取り出す
joystickState = e.state;
}
/**
* フレーム開始イベント
* 毎フレーム呼び出される。
* @param e
*/
private function onEnterFrame(e:Event):void
{
// ジョイスティック番号 0 のデータを取得する
// データ取得完了時、 PACKET_RECEIVED イベントで通知される。
joyClient.getState(0);
// ジョイスティックの状態が入っている時
if (joystickState != null)
{
textField.text = "";
textField.appendText("ボタン 0 が押された: ");
textField.appendText("" + joystickState.isDown(0));
textField.appendText("\n");
textField.appendText("ボタン 0 が押され続けている: ");
textField.appendText("" + joystickState.isHeld(0));
textField.appendText("\n");
textField.appendText("ボタン 0 が離された: ");
textField.appendText("" + joystickState.isUp(0));
textField.appendText("\n");
textField.appendText("\n");
textField.appendText("方向キーの上が押されている: ");
textField.appendText("" + joystickState.up);
textField.appendText("\n");
textField.appendText("方向キーの上下の値: ");
textField.appendText("" + joystickState.y);
textField.appendText("\n");
}
}
}
}