日本語の解説記事はまだあまり見かけないのですが、ProcessingにはPython ModeというスケッチをJavaではなくPythonで書ける機能があります。
今日はそのPython Modeを使っていくつかスケッチを作成してみたいと思います。
Python Modeの導入
Python Modeの機能はJonathan Feinbergらによって開発されているprocessing.pyで実現されています。Python Modeは公式のIDEに取り込まれていますので、GUIから簡単にインストールすることができます。
まずIDEのウィンドウ右上にあるモード選択ボタン(通常はJavaと書かれています)を押して、Add Mode...
をクリックします。
次にMode ManagerのメニューからPythonを選択し、Install
ボタンをクリックすることでPython Modeがインストールされます。
以後は、新規にスケッチを作成する際に、右上のモード選択ボタンからPythonを選択するだけで、Pythonを使ってコードを書くことができます。
Pythonによる簡単なスケッチの作成
それでは実際にシンプルなスケッチをPythonで書いてみます。書式がPythonのものに変わるだけで、Javaの時の関数名がそのまま使えます。
x = 0 def setup(): frame.setTitle("Python Test") size(300, 300) noStroke() fill(255, 0, 0) def draw(): global x background(0) ellipse(x, 150, 100, 100) x += 1
Pythonモードで動かすと、ウィンドウのタイトルがディレクトリ名を含んだフルパスのものになってしまうため、frame.setTitle
メソッドでウィンドウのタイトルを明示的に指定しています。
実際の動作画面です。
Pythonらしいスケッチの作成
前のサンプルではJavaの時と記述量がほとんど変わらず、Pythonを使うメリットがあまり感じられませんでしたので、processing.pyのメタボールのサンプルを軽くアレンジしてみます。
blog_num = 3 blog_pos = [[0, 0], [40, 70], [120, 0]] blog_vel = [[1, 1], [1, 1], [1, 1]] pg = None pg_size = None def setup(): frame.setTitle("Metaball") size(640, 360) global pg, pg_size pg = createGraphics(width / 4, height / 4) pg_size = (pg.width, pg.height) def draw(): sqd = [[], []] for i in range(blog_num): for j in range(2): blog_pos[i][j] += blog_vel[i][j] if blog_pos[i][j] < 0 or blog_pos[i][j] > pg_size[j]: blog_vel[i][j] *= -1 sqd[j].append(tuple(sq(blog_pos[i][j] - n) for n in xrange(pg_size[j]))) pg.beginDraw() for y in range(pg_size[1]): for x in range(pg_size[0]): m = 1 for i in range(blog_num): m += 60000 / (sqd[0][i][x] + sqd[1][i][y] + 1) pg.set(x, y, color(0, (x + m + y) / 2, m + x)) pg.endDraw() image(pg, 0, 0, width, height)
動作画面はこちらになります。
終わりに
Pythonはスクリプト言語なのでJava版からの速度低下が心配でしたが、PC上であればそこそこがんばれる感じです。Pythonでさっとベースを作って、その後Javaに移植するというのも悪くなさそうです。