FlashでWiiリモコンのイベントを取得する方法まとめ
ここでは、任天堂Wii上で、Flashゲームなどを作るのに必須である、Wiiリモコンを操作する方法を紹介します。
ウノウで酒徳率急上昇の真相
こんにちは。酒徳峰章です。これまでの人生で「酒徳」という名字の人は、妻と家族親族だけだったのですが、なんと、先日より、ウノウ(株)に、酒徳千尋さんが入社されました。そこで、酒徳2号(もしくは、クジラ飛行机)と呼んで下さい。酒徳千尋(1号)さん、ともども、今後ともよろしくお願いします。(※私の方が先に入社しているのですが、酒徳1号をかけて勝負したところ負けてしまったので、私が2号となりました。)
Wiiの可能性
先日より、Nintendo Wiiについて研究しております。Wiiを使うと、お茶の間のTVでインターネットができるようになります。これは、とてもすごいことで、Wiiが持つ今後の可能性にワクワクしています。
但し、お試し版のブラウザ上のFlashでは、使えると思っていた「XMLSocket」が使えないという不具合を発見しました。製品版で直っていることを願います。
そんなわけで、今日は、Wiiのインターネットチャンネル上で使える、簡単なチャットを作ったりして研究をしてみました。その成果として、Wiiリモコンを操作する方法を紹介します。
WiiリモコンのイベントをJavaScriptで取る
Wiiリモコンを操作する方法は、既にいくつか研究がなされていまして、下記のサイトが参考になります。
その中で、wii.js は非常に使いやすく、JavaScriptから、以下のように書くだけで、Wiiリモコンのイベントを検出することができます。
var wiimote = new Wiimote(); // イベント wiimote.handleA = function() { alert('Aボタンが押されたよ!'); return true; } // コントローラを登録 wii.addController(wiimote); |
WiiリモコンのイベントをFlashで...(失敗)
JavaScriptで簡単にキーイベントを取ることができるので、Flashでも簡単にできるだろうと、いつもの要領で、Keyイベントにイベントを登録して、実行してみるのですが、うまくいきません。
それで、WiiCadeのWiiのFlash用ライブラリを使ってみるものの、うまくいきません。実は、これは、WiiCadeにゲームをアップロードして、WiiCadeの中でないと使えないというものなのです!なんと。(2007年4月現在)
FlashでWiiリモコンのキーイベントを取得する方法を調べてみると、下記の手順でJavaScriptと連携してイベントを取るとうまく行くことが解りました。
- (1) JavaScriptで onKeyPress(), onKeyDown(), onKeyUp()などのイベントを取る
- (2) Flashのオブジェクトに設定する
<script type="text/javascript"> function a_press(e) { var keyCode = e.which; alert("press " + keyCode); return false; // ----------- (*1) } </script> <body onKeyPress="return a_press(event)"> |
ポイントは、(*1)の部分で、ここで false を返さないと、特殊キーを無効にできません。
次に、キーイベントをFlash側に伝える方法ですが、こちらも工夫が必要です。Flash8からは、JavaScriptと相互に通信する ExternalInterface という機能があるのですが、WiiのFlash7では、これが使えません(泣)。
そのため、com.quasimondo.wii.WiiMoteから取得したFlashのコードを見てみると、FlashのStageサイズ変更のイベントを介して、キーイベントを取っています。手順は下記の通りです。
- (1)1ページに2つのFlashを作る。1つは、ゲーム用のFlash(A)1つは、キーイベントを取得する専用(B)。
- (2)JavaScriptでキーイベントを取ったら、キーイベント取得用Flash(B)のオブジェクトの「width」と「height」をキーコードの番号やキーの状態に変更する。
- (3)Stage変更イベントを取ったら、実際のゲーム用のFlashオブジェクトへ、LocalConnectionを使って通知する。
ちょっと複雑ですが、WiiCadeのAPIでもLocalConnectionのコードを見つけましたので、似たような感じで行っているっぽいです。
最後に
WiiでいろいろとFlashを動かして試してみましたが、ちょっと不便な点も分かって来ました。まず、上記のように面倒な手順を踏まないと、キーイベントが取れないこと(マウスは onPress イベントで取れます)。それから、ブラウザ上では、リンクの上にポインタが来ると、ぶるっと震えてクリックできることがわかるのですが、Flashでは、これができません。(裏技で振るわせる方法ないでしょうか?)また、Wiiリモコンのポインタの座標は取れますが、Wiiゲームに必須の傾きや速度のセンサは取得できません。
今後は、これを踏まえて、作る側で工夫して、面白いコンテンツを作っていけたらいいなぁと思います。
※私が現在開発中の、Web開発環境「葵2」でも、Wii上で日本語プログラミングができるようにする予定です。