Spde を使う

Scala 覚えたいんだけど作りたいものも作らなければならないものもぱっと思いつかないので、とりあえず適当にいじって遊ぶためのグラフィック環境を用意したい。
で、Scala版の processing みたいなのないのかしら? と思って「scala processing」で検索したらすでにあった。

サイトの方(http://spde.technically.us/See.html)にも

It’s also a tool for learning that language — and functional programming in general — visually.

と書いてあって、いやーそうなんですよ、といった感じ。

Processing も使ってみたいとは思っていたのでその点でも都合がいい。

      • -

http://spde.technically.us/Download.html から graft_2.8.0-0.4.2-setup.jar をダウンロード。

java -jar graft_2.8.0-0.4.2-setup.jar でインストール処理が行われ、続いてサンプルが実行・表示される。

サンプルのウィンドウを閉じてディレクトリ移動。

cd graft_2.8.0-0.4.2-project/

ここにある Sketch.spde がさっき動いたサンプルのソースで、 ./sbt run で実行できる。

Sketch.spde の中身は次のようになっていて、見れば大体分かる。
ウィンドウサイズ指定して、フレームレート指定して、あとは draw 関数が繰り返し実行されてアニメーションが表示される。という仕組みらしい。

size(500, 200)
frameRate(20)
val items = { 0 to width }.view.map { (_, random(255).toInt) }

def draw {
  for ((x, color) <- items) {
    stroke(color)
    line (x, 0, x, height)
  }
}

同じディレクトリが 1つのプロジェクト(?)として扱われるらしく、今の状態を一旦 Sketch_old.spde に退避して Sketch.spde をいじっていざ実行…なんてことをすると draw メソッドが2回定義されてるよ(method draw is defined twice)、と怒られる。

コンパイル時に拡張子が .spde なファイルがすべて src_managed/main/scala/glob.scala にまとめられて、それがコンパイルされるためらしい。

余計なものを含めずにコンパイルする方法を調べてみたけど分からなかった。
しかたないので一旦保留。いい方法が見つかったら追記するかも。

こういう時に状態を元に戻したかったら

./sbt clean

      • -

とりあえず乱数と基本的な図形の描き方が分かればはじめの一歩のラインアート的なものが作れる。

それもさっきのサンプルの Sketch.spde に載ってるので、さっそく改造してみる。

random() で乱数を生成して stroke() で色を指定して line() で線が引ける。

size(500, 200)
frameRate(20)
stroke(0)

def draw {
  line(0, 0, random(500), random(200))
}

2011-10-10 23:47:44

できた。これだけだと全然 Scala 関係ないように見える。

      • -

(sbt の)ヘルプは

./sbt help

      • -

あとは ~run を覚えておくと良さそう:

これを使うと、ウィンドウを閉じると自動的にコンパイルされてまたウィンドウが開く。

追記 2011年 10月 12日 水曜日 20:05:20 JST

Ubuntu 10.10 に上記の手順でインストールした素の状態だと OpenGL が使えませんでした。使えるようにできるみたいなんですが、自分にはやり方が分かりませんでした。