Mac OS X で Wiiリモコン
使用方法
WiiリモコンはBluetoothで通信しているので、WiiリモコンをMacのマウスの替わりにしてみました。
http://blog.hiroaki.jp/2006/12/000433.html
からソフトウェアがダウンロード出来ます。
motionをキャプチャ(加速度センサ?)してマウスポインタを操作するのですが、これが結構難しい;
キーのマッピングも出来ます。
proce55ingとのコラボレーションを考える
インタラクティブな操作を与えるWiiリモコン。
インタラクティブなプログラミングをサポートするProcessing。
やっぱり、この2つのコラボを考えずにはいられない!
とはいえ、processingからマウス操作によるイベントはごく普通に書けるので問題ありません。
これは、マウスのクリックされた位置にボールを出現させ、自由落下させるプログラムの実行画面です。
バウンドのうまい止め方がわからなかったので、一定時間後にボールはフェードアウトするようにしてあります。
Wiiリモコンで操作すると一気にインタラクティブ感がアップした気がします。
Bボタンでボール出現(左クリック)、Aボタンで終了(Esc)というふうにマッピングしてみました。
ソースコード
float g = 0.98; // gravity float damping = 0.6; // damping rate Ball[] balls = new Ball[256]; int ballCount; void setup() { size(800, 600); colorMode(HSB, 100); background(99); frameRate(30); ballCount = 0; } void draw() { fadeToWhite(); if (ballCount > 0) for (int i=0; i<ballCount; i++) balls[i].update(); } void mousePressed() { balls[ballCount] = new Ball(); ballCount += 1; } public class Ball { float x, y; float dy; float r; color ballColor; float timeStep; // constructor Ball() { x = mouseX; y = mouseY; dy = 0; r = random(10, 50); ballColor = color(random(100), 60, 99, random(50, 100)); timeStep = 0; } // update ball coordinate public void update() { timeStep += 0.08; dy += g * timeStep; y += dy; this.bound(); if (timeStep < 6.5) { noStroke(); fill(ballColor); ellipse(x, y, 2 * r, 2 * r); } } // check if bound private void bound() { float ground = height - r; if (y > ground) { dy = - dy * damping; y = ground - (y - ground); } if (abs(dy) < 1) dy = 0; } } void fadeToWhite() { noStroke(); fill(99, 50); rectMode(CORNER); rect(0, 0, width, height); }
簡単ではありますが、このようなプログラムはクラスベースのほうが理解しやすい気がします。
追記:
ソースコードの一部余計な記述を削除しました。
vimでproce55ingハイライティング
なんと、vim用のprocessingハイライティングのプラグインが公開されているではないですか。
Processing - Syntax highlighting for the Processing language : vim online
ということで、たびたび使ってみたりしています。
こんな感じ。