3.0.1 • Published 3 years ago

quark2d v3.0.1

Weekly downloads
2
License
MIT
Repository
github
Last release
3 years ago

Quark2d

Install - Features - Getting started - Example - Docs - Demos

Install

Npm

npm install quark2d

Yarn

yarn add quark2d

Features

Rigid bodies

Circles, Polygons and Capsules

Multiple shapes attached to a single body

Friction and restitution

Dynamic, static and kinematic bodies

Sleeping bodies

Sensor shapes

Rounded shapes

Stable stacking

Warm starting

Mass, density, area

Constraints

Fast collsion detection and solving

GJK, EPA

Grid broadphase

Collision filtering

Events

Example

Use the left mouse button to move the bodies.

Right mouse button to move the camera.

Mouse wheel to zoom.

import {
    Engine,
    Render,
    Runner,
    Vector,
    MouseJoint,
    Body,
    BodyType,
    Circle,
    Convex,
    Factory,
    SleepingType,
} from 'quark2d';

// Create engine
const engine = new Engine();

// Disable sleeping
engine.sleeping.setType(SleepingType.NO_SLEEPING);

// Create an empty body
const circleBody = new Body({
    position: new Vector(0, 9),
});

// Create a circle shape
const circleShape = new Circle({
    radius: 0.5
});

// Add the circle shape to the body
circleBody.addShape(circleShape);

// Add the the body to the world
engine.world.add(circleBody);

// Create boxes
for (let i = 0; i < 8; ++i) {
    for (let j = 0; j < 5; ++j) {
        engine.world.add(Factory.Body.rectangle(new Vector(i - 3.5, j), 0, 0.8, 0.8, {}, {radius: 0.05}));
    }
}

// Create an empty static body
const ground = new Body({
    position: new Vector(0, 10),
    type: BodyType.static,
});

// Create rectangular shape
const groundShape = new Convex({
    vertices: [
        new Vector(-15, -0.5),
        new Vector(15, -0.5),
        new Vector(15, 0.5),
        new Vector(-15, 0.5),
    ],
    radius: 0.1, // Rounding radius
});

// Add the rectangular shape to the body
ground.addShape(groundShape);

// Add the the body to the world
engine.world.add(ground);

// Create a render
const render = new Render(engine, document.body, {
    width: 800,
    height: 600,
});

// Create a mouse joint
const mouseJoint = new MouseJoint(engine, render.mouse);

// Create a runner
const runner = new Runner();
runner.on('update', (timestamp) => {
    engine.update(timestamp);
})
runner.on('render', (timestamp) => {
    render.update(timestamp);
});

// Run the runner
runner.run();
runner.runRender();
3.0.1

3 years ago

3.0.0

3 years ago

2.3.0

3 years ago

2.2.0

3 years ago

2.4.1

3 years ago

2.4.0

3 years ago

2.3.1

3 years ago

2.1.0

3 years ago

2.0.8

3 years ago

2.0.3

3 years ago

2.0.2

3 years ago

2.0.5

3 years ago

2.0.4

3 years ago

2.0.7

3 years ago

2.0.6

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago

0.0.8

3 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago