KOSAKA LABORATORY->Tips

 このBlogの一部が書籍になりました。
書籍:「WiiRemoteプログラミング」
著者:白井暁彦・小坂崇之・木村秀敬・くるくる研究室
表紙:タナカユカリ
発売:2009年7月25日 好評発売中
詳細:こちらから

内容:WiiRemoteを利用したインタラクティブ技術のプログラミング学習書

 話題の家庭用ゲーム機「Wii」の特徴的なコントローラーである「WiiRemote」をPCで使うプログラミングが注目されている。高性能な加速度センサーや赤外線センサーを持ち、Bluetooth接続が可能で、プログラミング可能なデバイスを、個人レベルで自作したり入手したりすることはできなかった。WiiRemoteの登場とともにそれが安価で手軽に入手可能になり、多くの人々が興味を持っている。

 本書は、WiiRemoteの応用に興味があるプログラミング初学者向けに、WiiRemoteをPCから扱うためのプログラミングを解説する。ハードウェア寄りのゲームプログラミング入門書として、ステップバイステップでソースコードを解説する。具体的なサンプルを開発しながら、インタラクション技術を独習できる。言語はC/C++、C#およびActionScript 3、Processingなどをサポート。

Wiiリモコンのボタン制御プログラム その1

次にWiiRemoteのボタン制御についてプログラミングを行っていきます。
ここでは、WiiリモコンのボタンのON/OFFを取得するプログラムを作成します。

1.ラベルの作成
1.フォームにラベルを4つ貼り付けてください。


2.WiimoteLibの宣言と制御プログラム
Form1.csに以下の部分を追加する。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WiimoteLib;    //WimoteLib

namespace WiimoteLib_Sample {
    public partial class Form1 : Form {


        Wiimote wm = new Wiimote();                  //Wiimoteの宣言
        

        public Form1() {
            InitializeComponent();

            wm.WiimoteChanged += wm_WiimoteChanged;  //イベント関数の登録
            wm.Connect();                          //Wiimoteの接続
        }



        //Wiiリモコンの値が変化したときに呼ばれる関数
        void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args){
            WiimoteState ws = args.WiimoteState;    //WiimoteStateの値を取得

            if (this.IsHandleCreated) {
                this.Invoke( (MethodInvoker)delegate() {
                    this.DrawForms( ws );            //フォーム描写関数へ
                });

            }
        }

        //フォーム描写関数
        public void DrawForms(WiimoteState ws) {
            this.label1.Text = "Button A:" + (ws.ButtonState.A);  //ボタンA
            this.label2.Text = "Button B:" + (ws.ButtonState.B);  //ボタンB
            this.label3.Text = "Button 1:" + (ws.ButtonState.One);//ボタン1
            this.label4.Text = "Button 2:" + (ws.ButtonState.Two);//ボタン2
        }

    }
}
実行
1.WiiRemoteを接続してください。 2.F5キーを押して実行してください。
 実行すると下図のようなアプリケーションが起動します。
  ※もしエラーが発生する場合はWiiRemoteが正しく接続されているか確認してください。


3.WiiリモコンのAボタンをクリックし続けてください。


4.Wiiリモコンのすべてのボタンを押さないでください。


5.WiiリモコンのAボタンとBボタンを同時にクリックしてください。


6.Wiiリモコンの1ボタンと2ボタンを同時にクリックしてください。


解説

WiiリモコンのボタンのON/OFFによってFormのラベルが変化します。FalseがOFF, TrueがONに対応しています。

            wm.WiimoteChanged += wm_WiimoteChanged;  //イベント関数の登録
Wiiリモコンのボタンが押されたなど、値に変化があったときに呼ばれる関数を宣言しています。ここでは、Wiiリモコンの値に変化があった場合、WiimoteChangedという関数が呼ばれるように設定しています。

 

            WiimoteState ws = args.WiimoteState;    //WiimoteStateの値を取得
Wiiリモコンのステータスをとりこんでいます。WiimoreState wsの中には、イベントで発生したボタンなどの値が取り込まれます。

 

            this.label1.Text = "Button A:" + (ws.ButtonState.A);  //ボタンA
WiiリモコンのAボタンの値をlabel1に表示しています。
ボタンが押されていたら、True を表示します。
ボタンが離されていたら、Falseを表示します。

 

            this.label2.Text = "Button B:" + (ws.ButtonState.B);  //ボタンB
WiiリモコンのBボタンの値をlabel2に表示しています。
ボタンが押されていたら、True を表示します。
ボタンが離されていたら、Falseを表示します。

 

            this.label3.Text = "Button 1:" + (ws.ButtonState.One);//ボタン1
Wiiリモコンの1ボタンの値をlabel1に表示しています。
ボタンが押されていたら、True を表示します。
ボタンが離されていたら、Falseを表示します。

 

            this.label4.Text = "Button 2:" + (ws.ButtonState.Two);//ボタン2
Wiiリモコンの2ボタンの値をlabel1に表示しています。
ボタンが押されていたら、True を表示します。
ボタンが離されていたら、Falseを表示します。