Box2Dは、2次元の物理エンジンである。ちょっとした実験のためにMacにインストールしてみたら、すんなりといかなかったのでインストールのメモ。
元ネタはこちら。
準備
まずは、Box2Dのサイトから、最新のBox2Dをダウンロードする。記載時点での最新はBox2D_v2.3.0.7zである。
ダウンロードすると、Box2D_v2.3.0.7zのような7zipのアーカイブが得られるので、UnArchiverなどで解凍しておく。
ビルドにCMakeが必要なので、導入していなければインストールしておく。Brewならば以下でOK。
brew install cmake
X11の環境が必要なのでXQuartzをインストールする。XQuartzのサイトから最新版のものをダウンロードする。記載時点での最新はXQuartz-2.7.6.dmgである。ダウンロードしたらインストールするが、再ログインしないと有効にならないと言われるので再起動しておいた。
インストール
ターミナルを開き、Box2Dを展開したフォルダ内にあるビルド用フォルダに移動する。例えば以下のような感じ。
cd ~/Downloads/Box2D_v2.1.2/Box2D/Build
続いて、cmakeとmakeを行う。
cmake .. make
すると、最後の方でエラーが生じる。
[ 97%] Building CXX object Testbed/CMakeFiles/Testbed.dir/Framework/Main.cpp.o In file included from /Users/itoh/Research/Box2D_v2.3.0/Box2D/Testbed/Framework/Main.cpp:20: /Users/itoh/Research/Box2D_v2.3.0/Box2D/Testbed/Framework/Test.h:38:24: error: no member named 'rand' in namespace 'std'; did you mean simply 'rand'? float32 r = (float32)(std::rand() & (RAND_LIMIT)); ^~~~~~~~~ rand /usr/include/stdlib.h:159:6: note: 'rand' declared here int rand(void); ^ In file included from /Users/itoh/Research/Box2D_v2.3.0/Box2D/Testbed/Framework/Main.cpp:20: /Users/itoh/Research/Box2D_v2.3.0/Box2D/Testbed/Framework/Test.h:47:24: error: no member named 'rand' in namespace 'std'; did you mean simply 'rand'? float32 r = (float32)(std::rand() & (RAND_LIMIT)); ^~~~~~~~~ rand /usr/include/stdlib.h:159:6: note: 'rand' declared here int rand(void);
要は、std::rand()と書かれている部分は、rand()じゃないの?という指摘なので、~/Downloads/Box2D_v2.3.0/Box2D/Testbed/Framework/Test.hの38行目と47行目のstd::rand()をrand()のみに修正する。
後は再度makeを行えばきちんとビルドされる。
動作確認
ビルドしたフォルダにて TestBed/TestBed を実行すれば、XQuartzが起動した後でTestBedが動き出す。
1から6までのキーを押すことで画面に物体が表示され、スペースを押すとランダムな箇所から玉が飛び出てくる。また、シフトキーを押しながらドラッグすると、任意の場所、任意の方向から玉を発射することができる。