News Mar 20: R.U.B.E v1.7 released. Instanciable objects!
Feb 21: Added RUBE sample loader for Cocos2d-X v3.4.
Feb 17: Funny Fists released in iOS App store and Google Play store. (YouTube video)
May 25: R.U.B.E v1.6 released. Samplers!
May 12: "On-the-fly" resource updating for Cocos2d-x
Apr 22: New blog post: Inverted pendulum control
Apr 7: On-screen logging class for Cocos2d-x
Mar 22: Downhill Supreme 2 released for iOS and Android
Jan 2: YouTube video: Making soft-body wheels in RUBE
Oct 6: Check out Supplyfront RTS, my 7dRTS entry continued.
Sep 26: R.U.B.E v1.5 released. Customizable item labels, snap-to-grid, export filtering, full-text help search.
Sep 18: Added RUBE sample loader for Cocos2d-X.
Sep 16: Updated RUBE sample loader for Cocos2d v2.
Aug 12: RUBE loader for Nape by Zeh Fernando
Aug 7: Added RUBE sample loader for SFML.
Jul 30: Try my MiniLD 7dRTS entry.
Jul 24: Added physics-driven particles tutorial.
Jul 20: New blog post: rendering solid ground (as in Downhill Supreme)
Jul 18: R.U.B.E v1.4 released. Command-line interface for batch jobs, hotkeys for scripts, better script management.
May 22: Downhill Supreme is out now! (iOS)
Apr 2: R.U.B.E v1.3 released. Collision bitplane editing, Cocos2d-iphone loader, usability improvements.
Mar 11: R.U.B.E v1.2 released. Now supports weld, friction, motor joints and automatic image reloading.
Mar 10: RUBE loader for libGDX by Tim Scott
Jan 28: New blog post: a functional combustion engine!
Jan 22: New blog post: wind tunnel
Jan 20: Added explosions tutorial.
Jan 16: Added buoyancy tutorial.
Jan 16: AndEngine sample project to load RUBE scene by Bart Hirst
Jan 14: R.U.B.E v1.1 released, now supports custom properties.
Jan 1: All basic tutorials are now available in Chinese at Huge thankyou to @OhCoder!
Dec 23: Discussion forums have been set up
Dec 4: R.U.B.E v1.0 is ready !
Dec 2: YouTube video: Box2D pendulum clock
Nov 26: New blog post: rocket platform thingy
Nov 25: Video of R.U.B.E scenes in Chipmunk.
Nov 23: A sample project to load R.U.B.E scenes into Chipmunk physics! Details here.
Nov 14: An XCode sample project to load R.U.B.E scenes on iOS is now available. Details here.
Nov 11: A Java version of b2dJson is now available, based on JBox2D.
Nov 6: A Javascript version of b2dJson based on box2dweb is now available. Demo here!
Nov 2: The full specification of the JSON format used by b2dJson can be found here: b2dJson file structure
Oct 28: YouTube video: 2-minute ragdoll in R.U.B.E Box2D editor
Sep 29: YouTube video: R.U.B.E Box2D editor usage example

Box2D C++ tutorials - Making a test

Last edited: July 14 2013

Chinese version -> 中文

Making your own test

Let's add a test to the testbed, just a simple one that doesn't do much to start with but will serve as an example to look at all the places we need to edit.

First we'll need a subclass of the Test class to define the test itself. In the Testbed/Tests folder you should find a whole bunch of .h files with names similar to the tests you see in the testbed. In this folder, add another .h file of your own, with a clever name like uhh... FooTest. For now, we'll just make an empty test which shows some text at the top of the screen.
  #ifndef FOOTEST_H
  #define FOOTEST_H
  class FooTest : public Test
        FooTest() { } //do nothing, no scene yet
        void Step(Settings* settings)
            //run the default physics and rendering
            //show some text in the main screen
            m_debugDraw.DrawString(5, m_textLine, "Now we have a foo test");
            m_textLine += 15;
        static Test* Create()
            return new FooTest;
The above class does not override any input functions, and doesn't set up a scene either. The Step() function is overridden, and uses the variable m_debugDraw of the parent class as a handy way to get some information on the screen. Another variable from the parent class, m_textLine is used here to increment the text drawing position, you would need to do this if you want to show more than one line of text without having them all on top of each other. The Create() function gives an instance of this class to the testbed framework when necessary.

Now to add this to the testbed, the file TestEntries.cpp in the same folder needs a couple of lines added:
  #include "FooTest.h"
        {"Foo test", FooTest::Create},
These additions will go next to the existing lines of the same type which are already there. Take a look in the file and it will be pretty clear what I mean.

Now build the project again and run it. You should see your 'Foo test' option at the bottom of the drop-down list, and when selected the test should run and appear like this:
Foo test
If you want your test to be selected by default when the testbed app starts up, just put the FooTest::Create line at the top of it's list.

Next: Bodies