任天堂のゲーム機「Wii」には,インターネットを閲覧する機能「インターネットチャンネル」がある。その正式版が,2007年4月から配信されていることをご存じの方も多いだろう。2007年6月末までは無料でダウンロードできる(7月以降は有料)ので,我が家のWiiにもさっそくダウンロードした。とはいえ,Wiiでネットを閲覧したかったわけではない。別のことに興味があったのだ。
インターネットチャンネルの実体は,ノルウェーOpera SoftwareのWebブラウザをWiiリモコン(コントローラ)で操作可能にしたものだ。パソコンではマウスやキーボードを使えるが,Wiiでは基本的にリモコンだけでブラウザを操作しなければならない。そのために,リモコンの十字ボタンやBボタンでのスクロール,「+」「-」ボタンで拡大/縮小表示,といった具合に,独特のブラウザ操作が可能になっている。
Wiiのサポート情報にあるQ&Aを見ると,インターネットチャンネル向けのWebページ,つまりWiiリモコンによる操作に適したWebページを作成するための情報がいくつかある。そこに,Wiiリモコンの状態やポインティング位置を取得できるJavaScriptのオブジェクトが公開されているのだ。サンプルのWebページもある。おもしろそうなので,試しにWiiリモコン対応Webページを作ってみることにした。
ただし,公開されているオブジェクトやプロパティの数はそう多くはない。取得できる情報をざっとあげると,リモコンとセンサーとの距離,画面上のポインティング位置,カーソルの傾き方向ベクトル(リモコンのひねり),押されているボタン──などである。試しのページを作るだけなら,これぐらいでも十分だろう。ここでは,押されたボタン(十字ボタン)に応じて,画像の位置が変化するWebページを作ってみた(リスト1)。
|
リスト1●Wiiリモコンのオブジェクト(JavaScript)を使ったWebページ |
HTMLやコードの書き方がスマートではない点は勘弁していただきたい。また,ページの構造やスクリプトの一部は,サンプルとして公開されているページから流用している。
JavaScriptがわかる人であれば,コードを追うのは簡単だろう。ポイントだけを簡単に紹介する。「opera.wiiremote」が,Wiiリモコンの情報を得るための肝となるオブジェクトである。opera.wiiremotのupdateメソッドを実行すると,引数(0から3)で指定したリモコンの情報を持つオブジェクトを返す。ここでは,forループで二つのリモコンの情報を取得している。
| |
写真1●作成したページをインターネットチャンネルで閲覧したところ [画像のクリックで拡大表示] |
isEnabled(接続されているか),isDataValid(データが有効か),isBrowsing(ブラウジングをする権利があるか)はそれぞれ,取得したリモコン・オブジェクトのプロパティである。同様に,holdプロパティの値(数値)を見れば,どのボタンが押されているかかが判断できる。例えば,十字ボタンの上は「8」,下は「4」,右は「2」,左は「1」といった具合だ。そこでswitch文では,十字ボタンの操作に合わせて,テーブル・タグ内の上下左右に画像を表示するようにしている(写真1)。
ただし,holdプロパティで値を取得できるのは,isBrowsingが1でないリモコンだけである。実は,(リモコンが複数あっても)インターネットチャンネルを操作できるリモコンは1台だけだ(そのリモコンのisBrowsingが1となる)。それ以外のリモコンは,ページをスクロールしたり,リンクをクリックするといったブラウジング操作は一切できない。
その代わりに,このサンプルのように,holdプロパティで値を取得してページのコンテンツを書き換えるといったことは可能だ。裏を返せば,今回のサンプルは,2台目のリモコンがなければ画像を表示できない,中途半端なページになっている。仕様とはいえ,1台目のリモコンのholdプロパティを得られないのは,今ひとつ納得できない。
ところで,このサンプルを作るために,会社に行かず,自宅のWiiであれこれ試していたところに,子供(小学生)が学校から帰ってきた。普段,筆者は子供の前でゲームをしないので,何をしているものかと興味深げにのぞき込んできた。作ったページを表示して,リモコン操作で画像を動かしていると,横で「すげぇ」とつぶやいた。おそらく父親がWii対応ソフトを作っているとでも思ったのだろう。実際は,ものすごくちゃちなWebページなのに。
高木記者の名作コラム『Wiiに賭けた「母親の復権」』にはほど遠いが,Wiiリモコン対応のWebページを作って見せれば,父親の復権も少しは果たせるかもしれない。暇と興味があれば,ぜひチャレンジしてみてほしい。