wiiでキーイベント取得

最近wiiにハマリ中。
しかもゲームじゃなくてインターネットチャンネル
ゲームまだ買ってないし。

しかしこれなかなか面白いかも。
調べてみるとwii.jsってので、リモコンのキーイベントが取得出来るっぽい。

http://www.bolinfest.com/wii/

サンプルはこんな感じ。

//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を返すとデフォルトの機能が動きます。