Shut the fuck up and write some code

グダグダ言わずにコードを書きたいブログ

ofxBox2dを使う時のオブジェクトの宣言

今更ながらにoFでのopenCV+Box2dという組み合わせを試してたのですが、某書のサンプルを使ってたみたところ動かず、かなりハマったのでメモっておきます。

環境はoF0.8.4+ofxBox2d最新版です。

某書のサンプルの記述ではBox2dのオブジェクトのインスタンスを生成して

ofxBox2dCircle circle;
circle.setup(box2d.getWorld(), pos.x, pos.y, 4);
contourCircles.push_back(circle);

となっていますが、これだとどうも挙動がおかしい。インスタンスは生成されて描画されますが、1mmたりとも全く動かない。 Box2Dめえ・・・。

で次のような記述に変更。

ofPtr<ofxBox2dCircle> circle = ofPtr<ofxBox2dCircle>(new ofxBox2dCircle);
circle.get()->setup(box2d.getWorld(), pos.x, pos.y, 4);
contourCircles.push_back(circle);

この方法の意味がよくわかってないのですがどうもofPtrというクラスでラップしてやらないといけないらしいです。 サンプルがこのような記述になっていたので、おそらくこの書き方がデフォルトらしい。

vanderlin/ofxBox2d · GitHub

もちろんヘッダの定義も

vector <ofPtr<ofxBox2dCircle> > contourCircles

と書いておきます。

これでとりあえず想定される挙動になりました。

f:id:very_tired:20150312184502p:plain:w300

某書第2版も出版されてから結構経つのでそろそろ新しい情報をとりまとめた本が出て欲しい・・・。