processing で scala の並列コレクションを試そうと思ったらヌルポだったでござるの巻

Share photos on twitter with Twitpic
はい。そういうことです。
このスレは早くも終了ですね。


https://gist.github.com/1366985 の Par.scala の 183 行目の balls foreach を balls.par foreach にしてみると

[error] (Animation Thread) java.lang.NullPointerException
java.lang.NullPointerException
at processing.core.PGraphics.vertexTexture(PGraphics.java:1220)
at processing.core.PGraphics.vertex(PGraphics.java:1179)
at processing.core.PGraphics.imageImpl(PGraphics.java:2922)
〜省略〜

これまた見事なヌルポでおじゃるな。ほむほむw


まぁ当然のことながら processing は並行レンダリングに対応してないという顔になる。終わり。
だれか processing に並行レンダリング機能はよw

環境

java 1.6.0_26
scala 2.9.1.final
sbt 0.11
processing 1.5.1

スペック

CPU 1.7 GHz Intel Core i5
メモリ 4 GB 1333 MHz DDR3
記憶ドライブ SSD

折角作ったので計測してみた。

Share photos on twitter with Twitpic


par が processing で動かないことに気づいたのが結構作りこんじゃった後でして(←頭パー)
このままお蔵入りも勿体ないので、par なしのやつだけでも計測してみました。


y 軸がフレームレートで、x軸が生成している弾の数ですね。
画面サイズは、1024 x 768 です。


グラフを見る限り、4000個ぐらいまでは framerate を 60 でキープ出来るので普通に processing + scala弾幕シューティングは可能なんじゃないでしょうかね?


もちろん本番のゲームではもっと処理が入るので、数は落ちるでしょうがね。

実行

https://gist.github.com/1366985 から Par.scala と build.sbt を落としてきて、

sbt run

sbt の導入が分からない場合はグーグル先生や http://d.hatena.ne.jp/alpha_neet/20111012/1318437291 を参考にしてください。


フレームレートが 50 以下になるか、マウスをクリックすると弾を初期化して gruff.rb と screenshot<日付>.png を吐きます。


gruff.rb はグラフを吐く ruby スクリプトでして、動かすには http://d.hatena.ne.jp/alpha_neet/20111115/1321307074 を参考に gruff を入れ

ruby gruff.rb

で processing_framerate_test.png が吐かれます。

Par.scala を弄りたい時のメモ

変わる内容 Par.scala の行: 軽い説明
画面サイズ 112: size
フレームレート 114: frameRate
弾が初期化されるフレームレート 196: fRate の値。この行をコメントにすると初期化されなくなる
マウスクリックで弾が初期化されてうざい時 199: をコメント
プレイヤーのサイズ 36: createCircle
プレイヤー速度 119: player.speed
プレイヤーの弾を出す間隔 85: shotCt
プレイヤーが弾を出す数 17: List.range(0度 から 360度 までを x 度の間隔で弾を出す) という意味
弾のサイズ 34: createCircle
弾の速度 93: speed