next up previous
: 3 おわりに : Pressing: 打鍵の強さで出力が変わるビジュアルインタプリタ (インタラクティブ発表) : 1 はじめに


2 Pressing

図: Pressingの動作環境
\includegraphics[height=38mm]{pressing-overview.eps}

1 概要

Pressingを起動すると,仮想環境“Hakoniwa”とインタプリタ“Kotosaka”の入力欄が表れる.Kotosakaにスクリプトを入力すると,各文字を打鍵した強さの情報が保持され,スクリプトの実行時にHakoniwaで打鍵力に応じた出力が得られる.例えば,new Ball()と強く打つと大きく,弱く打つと小さいボールが現れる.我々は,fig:overviewに示す通り打鍵力の検出にMicrosoft社の研究用プロトタイプPressure-sensitive keyboard[3]を用いたが,ノートPCの内蔵加速度センサを用いる手法[1]でも同様のデモ環境を構築できるだろう.

Hakoniwaは2D物理シミュレータBox2D[4]のJava版実装を内蔵している.また,KotosakaはJavaScriptに影響を受けた簡易手続き型言語を解釈する.実装の詳細については公式サイト[*]を参照されたい.

2 Pressingの機能と使い方

1 物体を表すクラス

図: Pressingの使い方例
\includegraphics[width=120mm]{pressing-usage.eps}

BallとBoxは物体を表し,インスタンス化するとそれぞれ円と矩形がHakoniwaに現れる.そのときの打鍵が強ければ大きな物体が,弱ければ小さな物体が現れる.これらのクラスは次のようなメソッドとフィールドを持つ.

forward(), backward(), left(), right()
物体を前後進,左右回転させる.打鍵の強弱で速度が変わる.
moveTo(x, y)
物体を指定したスクリーン座標へ徐々に移動させる.打鍵の強弱で速度が変わる.
pen(brush), nopen()
物体の軌跡を描画するブラシを設定する.引数を与えないとデフォルトのブラシが使われる.打鍵の強弱でブラシの太さが変わる.pen(null)またはnopen()が呼ばれるとそれ以上軌跡を描画しない.ブラシについてはは次節で詳述する.
behavior
シミュレータが進むたび,引数に物体が渡された状態で呼ばれるコールバック関数.これは物体の恒常的な振る舞いを指定するために用意されたフィールドであり,例えば,物体を円を描くように移動させるアニメーションが可能となる.

2 ブラシを表すクラス

プリセットクラスのBrushは物体の軌跡を描くブラシを表す.ブラシは色と太さという2つの属性を持つ.インスタンス化の引数で色が,打鍵の強さで太さが決まる.

ブラシのmix(brush)メソッドを用いると,既存の二つのブラシを混ぜて新しいブラシを作れる.すなわち,二つのブラシの中間の色と太さを持つブラシのインスタンスが返される.メソッドの主体と引数のどちらに近いブラシが生成されるかは,それぞれの名前をどれだけ強く打鍵したかによる.

3 データ構造を表すクラス

プリセットクラスのStack,Queue,BinaryTreeはデータ構造を表す.インスタンス化するだけでは何も表示されないが,複数の物体を格納すると,物体同士を結ぶ半透明のバネとして描画される.

データ構造のインスタンスは,データ構造に固有の,要素を出し入れするメソッド(push(e), pop(), insert(e), removeなど)を持っている.要素がデータ構造に挿入されるときは引力が,取り出されるときは斥力が,要素と構造の間に働く.メソッド名を打つときの打鍵が引力または斥力の大きさを決める.すなわち,Queueでpop()と強く打つと高速に,弱く打つと低速に,要素がデータ構造から打ち出される.

4 マウス操作

Pressingは,キーボード操作に加え,マウスカーソルで直感的にHakoniwaとインタラクションすることができる.例えば,物体をドラッグしたり,クリックして選択したのちKotosakaでselected()と打ってその選択結果を利用することができる.



http://digitalmuseum.jp/software/pressing