Box2D is an Open Source rigid body 2D physics engine for C++. It’s currently (2.0.1) released under the MIT license, which is quite permissive. Box2D is used by, among other things, Gluon (http://gluon.tuxfamily.org/), which is a game library from KDE in-the-making.
Integrating Box2D into your Qt application is quite easy, and this blog shows you how to get started. First of all:
- Step 1: Download Box2D from Google Code: http://code.google.com/p/box2d/
- Step 2: Build it (I had to insert a few #include <cstring> to get it to build)
- Step 3: Build and try the test bed application: Box2D/Examples/TestBed/
- Step 4: Read the manual: http://www.box2d.org/manual.html
- Step 5: Continue reading this blog to hook up the two frameworks…
The library doesn’t seem to install, so I just compiled it in-source and used it directly.
What I found during my approx 2 hour study today was that Box2D manages a world with bodies, similar to how QGraphicsScene manages items. In short, you create a world object and populate it with elements. Some bodies are static, like the ground, and some dynamic, like a bouncing ball. You can define joints, masses, friction, and other parameters, define a gravity vector, and then start simulating. Box2D doesn’t require a graphics system – any scene graph with elements that you can move and rotate should do fine. Graphics View works quite well. I’ve based this code on the provided “Hello World” example that comes with Box2D.
The world object defines the bounds of the coordinate system and the gravity vector. It feels very similar to QGraphicsScene. The bounds are, according to the docs, not enforced, but I got many run-time aborts when items are outside these bounds so you better make the world large enough to cover all your items. Continue reading