2012年12月17日月曜日

wiiリモコンのJavaScript

こんにちは!倉本です.
enchant.jsについて紹介しようかと思ったのですが,
西崎君に先を越されたのでwiiリモコンのJavaScriptについて書きます!

wiiインターネットチャンネルでは,特別なオブジェクトを用いるだけで,
wiiリモコンのひねりやセンサーバーとの距離を簡単に取得できます.

window.opera.wiiremote オブジェクト

これがwiiリモコンのプロパティを保持したオブジェクトになります.
このオブジェクトのupdate(num)というメソッドを呼び出すことで
リモコンの状態を保持したオブジェクトが返ってきます.
numはプレイヤーの番号で,0~3の数字を指定します.
オブジェクトのプロパティは以下の一覧の通りです.

    
プロパティ 説明
isEnabled wiiリモコンが接続されている場合,1.
isDataValid データが有効な場合,1.
isBrowsing ブラウジングしているwiiリモコンの場合,1
dpdX
dpdY
ポインティング位置.
hold ボタンを押している間,対応したボタンのフラグが立つ.
※ブラウジングしているwiiリモコン(isBrowsing が1であるwiiリモコン)は
 Bボタンのみ取得できる.
dpdRollX
dpdRollY
カーソルの傾き方向ベクトル.
ベクトルの長さは 1 ,右下がプラス方向.
dpdDistance センサーバーとwiiリモコンの距離.遠いほど大きい値になる.
dpdValidity ポインティング位置を認識するために用いたオブジェクトの個数.

それでは,実際に使ってみるために以下のようにJavaScriptをかいてみました.

(function(){
 var defaultDistance = 0;
 $(document).ready(function(){
  setInterval('UpdateWiiRemote()', 100);
 });
 function UpdateWiiRemote(){
  var pad = opera.wiiremote.update(0);
  if (pad.isEnabled && pad.isDataValid){
   if(defaultDistance == 0){
    defaultDistance = round2(pad.dpdDistance);
   }
   if(round2(rad * 180 / Math.PI) >= 45){
    $("#action").html("右!");
   }
   else if(-45 >= round2(rad * 180 / Math.PI)){
    $("#action").html("左!");
   }
   else if(defaultDistance-0.2 >= round2(pad.dpdDistance)){
    $("#action").html("前!");
   }
   else if(round2(pad.dpdDistance) >= defaultDistance+0.15){
    $("#action").html("後!");
   }
   else{
    $("#action").html("ストップ");
   }
  }
  else{
   $("#action").html("未接続");
  }
 }
 function round2(v){
  return Math.round(v*100)/100;
 }
})();

簡単に解説しますと,
・opera.wiiremote.update(0)で1Pのwiiリモコンの情報取得.
・isEnabledとisDataValidでwiiリモコンが接続されていて,データが有効か確認.
・有効であった場合,そのプロパティに応じてアクションを判定.
以上をsetIntervalでまわします.

アクションついて,
傾きは左右どちらかに45度以上傾いているかどうかで判断します.
距離は最初に1度,デフォルト距離としてセンサーバーとwiiリモコンの距離を保持しておき,それと現在の距離を比べて判断します.

こんな感じで傾きと距離の判定を活かして,アクションゲームっぽいのが作れそうですね!
誰かやってみてください!(他力本願)

お粗末な内容でしたが最後まで読んでくれた方,ありがとうございました.


1 件のコメント:

  1. Mohon ijin berpromosi. service Ac segala jenis merk. kami service Ac mencakup wilayah coverage seluruh Surabaya, Gresik, Sidoarjo. kami juga menerima jasa service perbaikan AC bongkar dan pasang AC. pekerjaan kami cepat, tepat, profesional, harga kompetitif di banding harga jasa luaran.
    service ac split sidoarjo
    tukang service ac sidoarjo
    service ac surabaya sidoarjo
    service ac surabaya selatan
    service ac surabaya timur
    service ac surabaya barat
    service ac surabaya utara
    service ac kota surabaya

    SPLIT-TYPE AIR CONDITIONERS
    MULTI-SPLIT AIR CONDITIONERS
    CHILLED WATER FAN COIL UNITS
    VRF AIR CONDITIONERS
    CHILLERS
    WINDOW-TYPE AIR CONDITIONERS

    http://jualjasaacsurabaya.blogspot.com
    Segera hubungi kami, dan kami akan datang kerumah Anda 24 Jam Non Stop.
    (Hari Sabtu / Minggu / Hari Libur buka)
    PIN BBM : 54BE0B4B / 5474CD93 / TELP : 085645475574

    返信削除