mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-23 09:26:51 -05:00
8cfc234b5b
* master: (32 commits) fix lint update dependencies Revert "Merge branch 'pr/526'" Revert "Merge branch 'pr/527'" changed alpha build configuration add window global, stub require and handle bad values in test tools added overlap metric to test tools fix path to build in test worker implemented threaded comparison testing fixed plugins in compare Added build comparison tools and tests Added config and test files to lint Set loose build version on dev server Added watch content base to dev server added timing to engine snapshot updated readme added tag push to release task updated readme removed yuidocjs dev dependency removed unused gulp release tasks ... # Conflicts: # src/collision/Resolver.js # src/core/Engine.js
144 lines
No EOL
4.3 KiB
JavaScript
144 lines
No EOL
4.3 KiB
JavaScript
var Example = Example || {};
|
|
|
|
Example.manipulation = function() {
|
|
var Engine = Matter.Engine,
|
|
Render = Matter.Render,
|
|
Runner = Matter.Runner,
|
|
Body = Matter.Body,
|
|
Common = Matter.Common,
|
|
Events = Matter.Events,
|
|
MouseConstraint = Matter.MouseConstraint,
|
|
Mouse = Matter.Mouse,
|
|
World = Matter.World,
|
|
Bodies = Matter.Bodies;
|
|
|
|
// create engine
|
|
var engine = Engine.create(),
|
|
world = engine.world;
|
|
|
|
// create renderer
|
|
var render = Render.create({
|
|
element: document.body,
|
|
engine: engine,
|
|
options: {
|
|
width: 800,
|
|
height: 600,
|
|
showAxes: true,
|
|
showCollisions: true,
|
|
showConvexHulls: true
|
|
}
|
|
});
|
|
|
|
Render.run(render);
|
|
|
|
// create runner
|
|
var runner = Runner.create();
|
|
Runner.run(runner, engine);
|
|
|
|
// add bodies
|
|
var bodyA = Bodies.rectangle(100, 200, 50, 50, { isStatic: true }),
|
|
bodyB = Bodies.rectangle(200, 200, 50, 50),
|
|
bodyC = Bodies.rectangle(300, 200, 50, 50),
|
|
bodyD = Bodies.rectangle(400, 200, 50, 50),
|
|
bodyE = Bodies.rectangle(550, 200, 50, 50),
|
|
bodyF = Bodies.rectangle(700, 200, 50, 50),
|
|
bodyG = Bodies.circle(400, 100, 25),
|
|
partA = Bodies.rectangle(600, 200, 120 * 0.8, 50 * 0.8),
|
|
partB = Bodies.rectangle(660, 200, 50 * 0.8, 190 * 0.8),
|
|
compound = Body.create({
|
|
parts: [partA, partB],
|
|
isStatic: true
|
|
});
|
|
|
|
World.add(world, [bodyA, bodyB, bodyC, bodyD, bodyE, bodyF, bodyG, compound]);
|
|
|
|
World.add(world, [
|
|
// walls
|
|
Bodies.rectangle(400, 0, 800, 50, { isStatic: true }),
|
|
Bodies.rectangle(400, 600, 800, 50, { isStatic: true }),
|
|
Bodies.rectangle(800, 300, 50, 600, { isStatic: true }),
|
|
Bodies.rectangle(0, 300, 50, 600, { isStatic: true })
|
|
]);
|
|
|
|
var lastTime = 0,
|
|
scaleRate = 0.6;
|
|
|
|
Events.on(engine, 'beforeUpdate', function(event) {
|
|
var timeScale = event.delta / 1000;
|
|
|
|
if (scaleRate > 0) {
|
|
Body.scale(bodyF, 1 + (scaleRate * timeScale), 1 + (scaleRate * timeScale));
|
|
|
|
// modify bodyE vertices
|
|
bodyE.vertices[0].x -= 0.2 * timeScale;
|
|
bodyE.vertices[0].y -= 0.2 * timeScale;
|
|
bodyE.vertices[1].x += 0.2 * timeScale;
|
|
bodyE.vertices[1].y -= 0.2 * timeScale;
|
|
Body.setVertices(bodyE, bodyE.vertices);
|
|
}
|
|
|
|
// make bodyA move up and down
|
|
var py = 300 + 100 * Math.sin(engine.timing.timestamp * 0.002);
|
|
Body.setPosition(bodyA, { x: 100, y: py }, true);
|
|
|
|
// make compound body move up and down and rotate constantly
|
|
Body.setPosition(compound, { x: 600, y: py }, true);
|
|
Body.rotate(compound, 1 * Math.PI * timeScale, null, true);
|
|
|
|
// after first 0.8 sec (simulation time)
|
|
if (engine.timing.timestamp >= 800)
|
|
Body.setStatic(bodyG, true);
|
|
|
|
// every 1.5 sec (simulation time)
|
|
if (engine.timing.timestamp - lastTime >= 1500) {
|
|
Body.setVelocity(bodyB, { x: 0, y: -10 });
|
|
Body.setAngle(bodyC, -Math.PI * 0.26);
|
|
Body.setAngularVelocity(bodyD, 0.2);
|
|
|
|
// stop scaling
|
|
scaleRate = 0;
|
|
|
|
// update last time
|
|
lastTime = engine.timing.timestamp;
|
|
}
|
|
});
|
|
|
|
// add mouse control
|
|
var mouse = Mouse.create(render.canvas),
|
|
mouseConstraint = MouseConstraint.create(engine, {
|
|
mouse: mouse,
|
|
constraint: {
|
|
stiffness: 0.2,
|
|
render: {
|
|
visible: false
|
|
}
|
|
}
|
|
});
|
|
|
|
World.add(world, mouseConstraint);
|
|
|
|
// keep the mouse in sync with rendering
|
|
render.mouse = mouse;
|
|
|
|
// fit the render viewport to the scene
|
|
Render.lookAt(render, {
|
|
min: { x: 0, y: 0 },
|
|
max: { x: 800, y: 600 }
|
|
});
|
|
|
|
// context for MatterTools.Demo
|
|
return {
|
|
engine: engine,
|
|
runner: runner,
|
|
render: render,
|
|
canvas: render.canvas,
|
|
stop: function() {
|
|
Matter.Render.stop(render);
|
|
Matter.Runner.stop(runner);
|
|
}
|
|
};
|
|
};
|
|
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = Example[Object.keys(Example)[0]];
|
|
} |