0
0
Fork 0
mirror of https://github.com/liabru/matter-js.git synced 2024-11-30 10:20:52 -05:00
liabru-matter-js/README.md

125 lines
5.4 KiB
Markdown
Raw Normal View History

2014-02-19 09:15:05 -05:00
# Matter.js
*Matter.js* is a 2D rigid body physics engine for the web written in JavaScript (yes, another)
[brm.io/matter-js](http://brm.io/matter-js)
2014-02-28 13:44:24 -05:00
[![Build Status](https://travis-ci.org/liabru/matter-js.png?branch=master)](https://travis-ci.org/liabru/matter-js)
2014-02-28 20:13:36 -05:00
[Features](#features) - [Status](#status) - [Install](#install) - [Usage](#usage) - [Docs](http://brm.io/matter-js-docs/) - [Implementation](#implementation) - [References](#references) - [License](#license)
2014-02-28 20:08:15 -05:00
2014-02-19 09:15:05 -05:00
### Demos
- [Mixed Shapes](http://brm.io/matter-js-demo#mixed)
- [Solid Shapes](http://brm.io/matter-js-demo#mixedSolid)
- [Stack](http://brm.io/matter-js-demo#stack)
- [Circle Stack](http://brm.io/matter-js-demo#circleStack)
- [Pyramid](http://brm.io/matter-js-demo#pyramid)
- [Car](http://brm.io/matter-js-demo#car)
- [Newton's Cradle](http://brm.io/matter-js-demo#newtonsCradle)
- [Restitution](http://brm.io/matter-js-demo#restitution)
- [Friction](http://brm.io/matter-js-demo#friction)
- [Air Friction](http://brm.io/matter-js-demo#airFriction)
- [Reverse Gravity](http://brm.io/matter-js-demo#gravity)
- [Sleeping](http://brm.io/matter-js-demo#sleeping)
- [Grid Broadphase](http://brm.io/matter-js-demo#broadphase)
- [Chains](http://brm.io/matter-js-demo#chains)
- [Ball Pool](http://brm.io/matter-js-demo#ballPool)
- [Wrecking Ball](http://brm.io/matter-js-demo#wreckingBall)
- [Avalanche](http://brm.io/matter-js-demo#avalanche)
- [Beach Balls](http://brm.io/matter-js-demo#beachBalls)
- [Stress 1](http://brm.io/matter-js-demo#stress)
- [Stress 2](http://brm.io/matter-js-demo#stress2)
2014-03-12 20:51:38 -04:00
- [Sprites (_edge_)](http://brm.io/matter-js-demo-master/#sprites)
- [Events (_edge_)](http://brm.io/matter-js-demo-master/#events)
2014-02-19 09:15:05 -05:00
### Features
- Physical properties (mass, area, density etc.)
- Rigid bodies of any convex polygon
- Stable stacking and resting
- Restitution (elastic and inelastic collisions)
- Conservation of momentum
- Friction and resistance
- Constraints
- Gravity
- Composite bodies
- Sleeping and static bodies
- Original JavaScript physics implementation (not a port)
2014-03-12 20:51:38 -04:00
- HTML5 canvas renderer (optional)
2014-02-19 09:15:05 -05:00
- Mobile-compatible (touch, scaleable)
- Cross-browser (chrome, firefox, IE8+)
- World state serialisation (requires
[resurrect.js](https://github.com/skeeto/resurrect-js))
- Built in GUI for testing (requires
[dat.gui.js](http://workshop.chromeexperiments.com/examples/gui/))
- Time scaling (slow-mo, speed-up)
- Broad-phase, mid-phase and narrow-phase collisions
2014-03-12 20:51:38 -04:00
- Events (_edge_)
- Sprite texture rendering (_edge_)
2014-02-19 09:15:05 -05:00
### Status
Matter.js is currently only *alpha* status, so production use should be avoided.
This engine is the result of [learning game physics](http://brm.io/game-physics-for-beginners/) and getting a bit carried away.
2014-03-11 06:34:00 -04:00
<br>There's no intention to compete with other engines, so I'm not sure yet how much it will be developed further.
2014-02-19 09:15:05 -05:00
<br>That said, the engine is reasonably stable and performs well, it's just not feature complete.
Though if I get time and people are interested, I may continue working on it.
<br>Contributions are also welcome, if you'd like to help.
### Install
2014-03-11 06:34:00 -04:00
Download [matter-0.5.0.js](https://github.com/liabru/matter-js/releases/download/0.5.0-alpha/matter-0.5.0.js) or [matter-0.5.0.min.js](https://github.com/liabru/matter-js/releases/download/0.5.0-alpha/matter-0.5.0.min.js) and include the script in your HTML file:
2014-02-19 09:15:05 -05:00
2014-03-11 06:34:00 -04:00
<script src="matter-0.5.0.js" type="text/javascript"></script>
For the latest features try the [edge version (master)](https://raw.github.com/liabru/matter-js/master/build/matter.js), but it may not be fully stable.
2014-02-19 09:15:05 -05:00
### Usage
2014-03-11 06:34:00 -04:00
See [Demo.js](https://github.com/liabru/matter-js/blob/master/demo/js/Demo.js) and [DemoMobile.js](https://github.com/liabru/matter-js/blob/master/demo/js/DemoMobile.js) for many usage examples.
2014-02-19 09:15:05 -05:00
<br>When loaded, all functions are under the global <code>Matter.*</code> namespace.
2014-02-28 20:08:15 -05:00
### Documentation
2014-03-11 06:34:00 -04:00
See the [Matter.js API Docs (v0.5.0)](http://brm.io/matter-js-docs/).
<br>If you're using the [edge version (master)](https://raw2.github.com/liabru/matter-js/master/build/matter.js) then see the [API Docs (master)](http://brm.io/matter-js-docs-master/).
2014-02-28 20:08:15 -05:00
2014-02-19 09:15:05 -05:00
### Implementation
2014-02-19 09:46:08 -05:00
The technical details for physics nerds and game devs.
2014-02-19 09:15:05 -05:00
<br>This engine is using the following techniques:
- Time-corrected position Verlet integrator
- Adaptive grid broad-phase detection
- AABB mid-phase detection
- SAT narrow-phase detection
- Iterative sequential impulse solver and position solver
- Resting collisions with resting constraints ala Erin Catto's method
(GDC08)
- Temporal coherence impulse caching and warming
- Collision pairs, contacts and impulses maintained with a pair
manager
- Approximate Coulomb friction model using friction constraints
- Constraints solved with the Gauss-Siedel method
- Semi-variable time step, synced with rendering
- A basic sleeping strategy
- HTML5 canvas renderer
### References
See my post on [Game physics for beginners](http://brm.io/game-physics-for-beginners/).
### License
Matter.js is licensed under [The MIT License (MIT)](http://opensource.org/licenses/MIT)
<br/>Copyright (c) 2014 Liam Brummitt
This license is also supplied with the release and source code.
<br/>As stated in the license, absolutely no warranty is provided.
### Similar Projects
If you need a more complete engine, check out jswiki's list of [Physics libraries](https://github.com/bebraw/jswiki/wiki/Physics-libraries)