npm install p2p2.js
=====
2D rigid body physics engine written in JavaScript. Includes collision detection, contacts, friction, restitution, motors, springs, advanced constraints and various shape types.
Demos | Examples | Documentation | Download | CDN | Wiki
* Buoyancy
* Car
* CCD
* Circle container
* Collision tests
* Compound objects
* Concave objects
* Constraints
* DistanceConstraint
* Fixed rotation
* Fixed XY
* Friction
* Gear constraint
* Heightfield
* Island solver
* Kinematic body
* Lock constraint
* Piston
* Prismatic constraint
* Ragdoll
* Sensor
* Restitution
* Sleep
* Segway
* Sleep
* Springs
* Surface velocity
* Suspension
* Tearable constraints
* TopDownVehicle
* Canvas: Asteroids game
* Canvas: Box on plane
* Canvas: Character demo
* Canvas: Circle on plane
* Canvas: Interpolation
* Canvas: Mousejoint
* Canvas: Raycasting
* Canvas: Rayreflect
* Canvas: Sensors
* Canvas: Sensors 2
* Pixi.js: Box on plane
``js
// Create a physics world, where bodies and constraints live
var world = new p2.World({
gravity:[0, -9.82]
});
// Create an empty dynamic body
var circleBody = new p2.Body({
mass: 5,
position: [0, 10]
});
// Add a circle shape to the body.
var circleShape = new p2.Circle({ radius: 1 });
circleBody.addShape(circleShape);
// ...and add the body to the world.
// If we don't add it to the world, it won't be simulated.
world.addBody(circleBody);
// Create an infinite ground plane.
var groundBody = new p2.Body({
mass: 0 // Setting mass to 0 makes the body static
});
var groundShape = new p2.Plane();
groundBody.addShape(groundShape);
world.addBody(groundBody);
// To get the trajectories of the bodies,
// we must step the world forward in time.
// This is done using a fixed time step size.
var timeStep = 1 / 60; // seconds
// The "Game loop". Could be replaced by, for example, requestAnimationFrame.
setInterval(function(){
// The step method moves the bodies forward in time.
world.step(timeStep);
// Print the circle position to console.
// Could be replaced by a render call.
console.log("Circle y position: " + circleBody.position[1]);
}, 1000 * timeStep);
`
html
`If you would like to use ordinary
`Array` instead of `Float32Array`, define `P2_ARRAY_TYPE` globally before loading the library.`html
`##### Node.js
`
npm install p2
`
Then require it like so:
`js
var p2 = require('p2');
`$3
| | Circle | Plane | Box | Convex | Particle | Line | Capsule | Heightfield | Ray |
| :--------------------------------------------------------------------------: |:------:|:-----:|:---------:|:------:|:--------:|:------:|:-------:|:-----------:|:------:|
| Circle | Yes | - | - | - | - | - | - | - | - |
| Plane | Yes | - | - | - | - | - | - | - | - |
| Box | Yes | Yes | Yes | - | - | - | - | - | - |
| Convex | Yes | Yes | Yes | Yes | - | - | - | - | - |
| Particle | Yes | Yes | Yes | Yes | - | - | - | - | - |
| Line | Yes | Yes | (todo) | (todo) | - | - | - | - | - |
| Capsule | Yes | Yes | Yes | Yes | Yes | (todo) | Yes | - | - |
| Heightfield | Yes | - | Yes | Yes | (todo) | (todo) | (todo) | - | - |
| Ray | Yes | Yes | Yes | Yes | - | Yes | Yes | Yes | - |Note that concave polygon shapes can be created using Body.fromPolygon.
$3
Tests are written for Nodeunit. Run the tests with the command `grunt test`.$3
Make sure you have git, Node.js, NPM and grunt installed.
`
git clone https://github.com/schteppe/p2.js.git; # Clone the repo
cd p2.js;
npm install; # Install dependencies
# (make changes to source)
grunt; # Builds build/p2.js and build/p2.min.js
`
The most recent commits are currently pushed to the `master`` branch. Thanks for contributing!