iforce2dのBox2Dのチュートリアルとかを少し動かしてみて、なかなか面白いと思った。
C++でのやり方は(Testbed上で動かしただけだけど)ある程度わかったので、今度はJavaで動かしてみたいと思った。Java環境で簡単にグラフィクスを扱うことができるProcessingでBox2Dを使ってみようとググってみたところ、BoxWrap2Dというのを使うページがトップにヒットした。これはBox2DをJavaにポートしたJBox2Dというものの薄いラッパー、とのこと。説明の通りやって動いたんだけど、ソースがPhysicsのインスタンスを作っただけで勝手に世界が更新されていて仕組みがよくわからなかったので、もっとピュアなレベルで触ってみようと、直接JBox2Dを試すことにした。
ただちょっと、JBox2Dのzipをダウンロードしたはいいが、ソースから.jarを作る方法がよくわからなかった(makeとかできるのか)ので、これまたJBox2Dを使う簡易ライブラリというPBox2Dのzipを使った。
Processingで外部のライブラリ(.jar)を使うには、スケッチブックのフォルダのlibraries内に突っ込めばいいようだ(Macだと~/Document/Processing/libraries/)。library.propertiesとかいう定義ファイルが必要みたいだが、その辺はPBox2Dのアーカイブに含まれている。
JBox2Dの動かし方はC++のBox2Dとだいたい一緒。サンプルのHelloWorldをテキスト出力だけじゃなく、Processingで描画するようにしたものがこちら:
import org.jbox2d.common.*; |
- Box2DではY軸のプラスが上としているんだけど、そうする必要はないよねってことで、下をプラスに変更してみた。
- Processingでは
millis()
関数で起動してからの時間(ミリ秒)が取れる。ただ、Box2DのWorld
のStep()
メソッドの刻み時間は固定にした方がいいとのこと。 - C++でボディが動的であることを示すフラグ
b2_dynamicBody
は、JavaではBodyType.DYNAMIC
今後はジョイントなどを試す。
追記
- PBox2Dに含まれていたJBox2Dのjarには、なぜかWheelJointが含まれていないという致命的な問題があった。
- http://labs.uechoco.com/blog/2008/03/processingjar.html に従って、ProcessingにJBox2Dのjarを追加することができた。
- つまづきポイントは、jarのファイル名にハイフンやピリオドを入れないことと、ライブラリのディレクトリ名とjarのファイル名を同じにすること。