JavaScript Physics Engines and Windows 8 Games

JavaScript Physics Engines and Windows 8 Games

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:

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.

JavaScript Physics Engines

Here’s a list of some key JavaScript-based physics engines that you might consider in your Windows Store game or simulation.

Ammo.js

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

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:

Cannon.js

Cannon.js is a 3D physics engine, based on… well, nothing. Unlike many physics engines, cannon.js is “100% open source JavaScript, written from scratch”. Cannon.js cites inspiration from three.js and ammo.js, yet claims to be lighter and smaller than ported engines such as ammo.js and JigLibJS.

According to the cannon.js download page, the latest updates were made in September, 2012.

Another Option: Windows Runtime Components

Another interesting option for Windows Store apps is to use Windows Runtime Components, components written in other languages such as C++, C#, and VB, and call them from your JavaScript-based game.

For example, the Farseer Physics Engine is based on .NET, but could be wrapped and exposed to a JavaScript-based Windows Store app.

Keep in mind that while this can work, it also adds new levels of complexity to your app. For example, which side “owns” the various pieces of game state? But, if you’re already familiar with another non-JavaScript physics engine, this may be worth considering.