Home > ActionScript2.0 > Wii リモコンのボタンを Flash で取得

Wii リモコンのボタンを Flash で取得

例の如くJCです。

昨日 Wii Flash API を公開してみたが、一番苦労したのはボタンのところ。
ということでちょっとボタンのところの説明をしてみようと思う。

Wii のボタンの取得は 「キーコード」 と 「window.opera.wiiremote オブジェクト」 で取得している。
インターネットチャンネルのQ&A によると wii リモコンの ボタンのキーは以下の用になる。

ボタン キーコード
十字ボタンの上 175
十字ボタンの下 176
十字ボタンの左 178
十字ボタンの右 177
Aボタン 13
Bボタン 171
-ボタン 170
+ボタン 174
1ボタン 172
2ボタン 173
HOMEボタン 取得できません

 だそうだ。
しかし、コレは 1P のみ。
他のコントローラーのボタンを取るには window.opera.wiiremote オブジェクト の “hold” から取得する必要がある。
それぞれのボタンの値は以下の用に鳴っている。

ボタンフラグ対応表
十字ボタンの上 8
十字ボタンの下 4
十字ボタンの左 1
十字ボタンの右 2
Aボタン 2048
Bボタン 1024
-ボタン 4096
+ボタン 16
1ボタン 512
2ボタン 256
HOMEボタン 取得できません

 俺は1Pをこっちに合わせる事にした。

同時押しの際には、同時押しをしたボタンに対応した値の和が返ってくる。
そして、誰が見ても分かるようこの値は二進数に直すととても便利な値になっている。

1P を他のコントローラーに合わせるには以下の方法を取った。
onKeyDown , onMouseDown , onKeyUp , onMouseUp
をそれぞれ取り、今押しているボタンの値(holdに合わせた値)をオブジェクトに登録。
Up の際にはそれを削除する。
Flash 側に送信する時は 全てのトータルを送る。
すると、Flash 側では 全てのコントローラーを平等に扱う事ができる。

Flash 側では以下の様な方法で onPress , onRelease を取得した。
まずは 送られて来た値を 2進数に直す。
そしてその値に 11111111111111 (14桁) を足す。
事前に以前送られてきた値を記録しておいて、その差を取る。
すると、0,1,2 の値の答えが求められる。
例えば

1011010 (new(7桁))と言う値が送られてきたとしよう。前回送られてきた値は
1101100 (old(7桁)) とする。
new に 11111111 (8桁) を足す。
12122121 と言う値になる。その値に対して old の値を引く。
- 1101100

答えは 11021021 となる。 その『 1【1021021】』 【】の部分が onPress と onRelease の値になる。
0 は onRelease
1 は 前回と変わらない。
2 は onPress
になる。

もっと簡単に見やすい形にしてみよう。縦に見ていってください。

new new + old
1 2 1 1
1 2 0 2
0 1 1 0
0 1 0 1

 new と old の組み合わせは以上の4つしかない。
二つを見比べると onPress と onRelease の関係が一目瞭然。
この方法を思いつくまで2日も悩んだけどね(笑)
他の方法があったら教えてください!

ちなみに何故一桁多い値を足しているかと言うと、 一番位が上の値のonRelease の際に 一桁ずれてしまう為です。

後は 前から順に見ていくだけです。


以上がボタン取得のポイントでした。
いや~勉強になりました。
ヌンチャクの値とかも取れたら面白いことできそうだったのになぁ。

Comments:0

Comment Form
Remember personal info

Home > ActionScript2.0 > Wii リモコンのボタンを Flash で取得

Search
Feeds
Meta

Return to page top