processing で scala の並列コレクションを試そうと思ったらヌルポだったでござるの巻
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
折角作ったので計測してみた。
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 |