Driven by opportunity and visions of success in the Windows Store, you set to work, turning your gaming idea into code.
“It Was My Understanding There’d Be No Math”
Maybe you wanted to move something across the screen. Maybe check if it hit a target. Oh, and there’s wind, and friction, and maybe things should bounce when they collide…
The specter of forgotten math begins to loom.
Thankfully, there are physics engines. Simply put, they take care of some of the math and work involved in games and simulations. Of course they don’t eliminate math and complexity, but they can make many scenarios easier:
- Physics-related math – Matrices, vectors, velocity, rotation, momentum, etc.
- Rigid body dynamics – Sounds unfriendly, but focuses on the motion and interactions of things whose shapes don’t change (save when deformed by say a collision or damage.) This also includes joints to connect multiple objects together to create more complex objects like a ragdoll of a person, a truck with parts/wheels/cargo, etc.
- Soft body dynamics – Less frequently-used, this is simulation of objects whose shape can change. Cloth is a pretty common example of this.
- Collision detection – Need to know when something hits or overlaps another? There are may ways to do this, from relatively simple bounding shapes, to often more accurate (and more complex) per-pixel approaches, and on to the vast world of 3D.
Why write such things yourself when others have taken the time to create great libraries?
That said, you may not need a physics engine at all. For the simplest games, it’s pretty easy to roll your own logic for basic bounding-box collision checking and basic motion. However, games become complex quickly, so even if you don’t imagine you’ll need one, the up-front investment in learning & using physics engines can pay off sooner than you’d think.
According to the Box2DJS download page, the last update was in April, 2010.
This version of Box2d by Pixel Lab is a clone of Box2DJS, updated to have better compression and to resolve bugs in the original version.
Ammo.js is a 3D physics engine, and an automated port of the Bullet Physics Library (written in C++). Like box2dweb, it is built into a single file (“ammo.js”), making it simple to import.
The lastest version of Ammo.js (built as “/builds/ammo.js”) was updated in September, 2012. Again, with this post being primarily an index, see the last section for links to more detailed analysis of Ammo.js.
JigLibJS2 is an automated port of the JigLibFlash physics engine. It’s a 3D physics engine, and on the JibLibJS2 home (and in the download source) there’s an interesting canvas demo (using three.js for 3D rendering) with multiple objects, including a car you can drive:
The download page on Github shows the latest updates in September, 2012.
According to the cannon.js download page, the latest updates were made in September, 2012.
Another Option: Windows Runtime Components
Here are some other helpful articles to get you started:
- If you’re interested in pursuing 3D rendering, try “Getting Started with Three.js”, and look to canvas and SVG rendering for your Windows Store games.
As I mentioned, this post lists only a subset of what’s out there. If you know of other helpful engines, please post in the comments!