wiiでキーイベント取得
最近wiiにハマリ中。
しかもゲームじゃなくてインターネットチャンネル。
ゲームまだ買ってないし。
しかしこれなかなか面白いかも。
調べてみるとwii.jsってので、リモコンのキーイベントが取得出来るっぽい。
サンプルはこんな感じ。
//wii.jsをあらかじめ読み込む //イベントハンドラの登録を先にやらないと動かない wii.setupHandlers(); var wiimote = new wii.Wiimote(); //十字キーの上 wiimote.handleUp = function(){alert("up");} //十字キーの下 wiimote.handleDown = function(){alert("down");} //十字キーの左 wiimote.handleLeft = function(){alert("left");} //十字キーの右 wiimote.handleRight = function(){alert("right");} //Aボタン wiimote.handleA = function(){alert("a");} //Bボタン wiimote.handleB = function(){alert("b");} //1ボタン wiimote.handle1 = function(){alert("1");} //2ボタン wiimote.handle2 = function(){alert("2");} //+ボタン wiimote.handlePlus = function(){alert("+");} //-ボタン wiimote.handleMinus = function(){alert("-");} //コントローラーの登録 wii.addController( wiimote );
ECサイトが提供してるAPIを使って、wiiリモコンの操作性を活かしたサイトを作ったら流行るかな〜
とりあえず十字キーの操作が出来るようにお遊びで作ってみたら、+/-ボタンや1、2ボタンを押しても何の反応もしなくなった。。。
デフォルトの機能がお亡くなりになるのはちょっと考え物。。。
仕様ですか?
*追記
どうやらhandleKeyPress()でfalse返してるせいで、こちらでイベント登録しなくても全てのキーが無効になってるみたい。
んで何故かhandleKeyPress()の先で呼び出してる個々のキーイベント処理って、デフォルトはtrue返してる。
こいつをそのままreturnしてやればOKなんじゃ。。。ってことでちょっくら書き換えてみた。
wii.Wiimote.prototype.handleKeyPress = function(keyCode) { var ret; switch (keyCode) { case wii.KEYCODE_UP_: ret = this.handleUp(); break; case wii.KEYCODE_DOWN_: ret = this.handleDown(); break; case wii.KEYCODE_LEFT_: ret = this.handleLeft(); break; case wii.KEYCODE_RIGHT_: ret = this.handleRight(); break; case wii.KEYCODE_MINUS_: ret = this.handleMinus(); break; case wii.KEYCODE_PLUS_: ret = this.handlePlus(); break; case wii.KEYCODE_1_: ret = this.handle1(); break; case wii.KEYCODE_2_: ret = this.handle2(); break; case wii.KEYCODE_B_: ret = this.handleB(); break; default: ret = true; } return ret; };
各キーイベントの戻り値をretに受け取ってreturnするだけ。
これでデフォルトの機能が復活!
http://d.hatena.ne.jp/lestrrat/20070529#1180419893
こちらの方は、setupHandlers()をカスタマイズして対応されてご様子。
こんなに豪快に書き換えちゃって良いんだろうか。。。
一応こちらでも動作確認したところ、自分でイベント処理を記述した場合は、明示的にfalseを返さないと処理が続行されて、デフォルトの機能が動くみたい。
意図的にやってんのかな〜
ちなみにhandleKeyPress()カスタマイズの場合だと、trueを返すとデフォルトの機能が動きます。