mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-23 09:26:51 -05:00
added Demo.timescale
This commit is contained in:
parent
186d839942
commit
1fac632f98
2 changed files with 83 additions and 3 deletions
|
@ -35,6 +35,7 @@
|
|||
<option value="wreckingBall">Wrecking Ball</option>
|
||||
<option value="rounded">Rounded Corners (Chamfering)</option>
|
||||
<option value="views">Views</option>
|
||||
<option value="timescale">Time Scaling</option>
|
||||
<option value="sprites">Sprites</option>
|
||||
<option value="pyramid">Pyramid</option>
|
||||
<option value="raycasting">Raycasting</option>
|
||||
|
|
|
@ -123,8 +123,6 @@
|
|||
|
||||
Demo.reset();
|
||||
|
||||
//_engine.timing.timeScale = 0;
|
||||
|
||||
World.add(_world, [
|
||||
Bodies.rectangle(200, 200, 100, 100, {
|
||||
chamfer: {
|
||||
|
@ -576,7 +574,88 @@
|
|||
|
||||
var renderOptions = _engine.render.options;
|
||||
renderOptions.showVelocity = true;
|
||||
//renderOptions.showAngleIndicator = false;
|
||||
};
|
||||
|
||||
Demo.timescale = function() {
|
||||
var _world = _engine.world;
|
||||
|
||||
Demo.reset();
|
||||
|
||||
var explosion = function(engine) {
|
||||
var bodies = Composite.allBodies(engine.world);
|
||||
|
||||
for (var i = 0; i < bodies.length; i++) {
|
||||
var body = bodies[i];
|
||||
|
||||
if (!body.isStatic && body.position.y >= 500) {
|
||||
var forceMagnitude = 0.04 * body.mass;
|
||||
|
||||
Body.applyForce(body, { x: 0, y: 0 }, {
|
||||
x: (forceMagnitude + Math.random() * forceMagnitude) * Common.choose([1, -1]),
|
||||
y: -forceMagnitude + Math.random() * -forceMagnitude
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var timeScaleTarget = 1,
|
||||
counter = 0;
|
||||
|
||||
_sceneEvents.push(
|
||||
Events.on(_engine, 'tick', function(event) {
|
||||
// tween the timescale for bullet time slow-mo
|
||||
_engine.timing.timeScale += (timeScaleTarget - _engine.timing.timeScale) * 0.05;
|
||||
|
||||
counter += 1;
|
||||
|
||||
// every 1.5 sec
|
||||
if (counter >= 60 * 1.5) {
|
||||
|
||||
// flip the timescale
|
||||
if (timeScaleTarget < 1) {
|
||||
timeScaleTarget = 1;
|
||||
} else {
|
||||
timeScaleTarget = 0.05;
|
||||
}
|
||||
|
||||
// create some random forces
|
||||
explosion(_engine);
|
||||
|
||||
// reset counter
|
||||
counter = 0;
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
var bodyOptions = {
|
||||
frictionAir: 0,
|
||||
friction: 0.0001,
|
||||
restitution: 0.8
|
||||
};
|
||||
|
||||
// add some small bouncy circles... remember Swordfish?
|
||||
World.add(_world, Composites.stack(20, 100, 15, 3, 20, 40, function(x, y, column, row) {
|
||||
return Bodies.circle(x, y, Common.random(10, 20), bodyOptions);
|
||||
}));
|
||||
|
||||
// add some larger random bouncy objects
|
||||
World.add(_world, Composites.stack(50, 50, 8, 3, 0, 0, function(x, y, column, row) {
|
||||
switch (Math.round(Common.random(0, 1))) {
|
||||
|
||||
case 0:
|
||||
if (Math.random() < 0.8) {
|
||||
return Bodies.rectangle(x, y, Common.random(20, 50), Common.random(20, 50), bodyOptions);
|
||||
} else {
|
||||
return Bodies.rectangle(x, y, Common.random(80, 120), Common.random(20, 30), bodyOptions);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
return Bodies.polygon(x, y, Math.round(Common.random(4, 8)), Common.random(20, 50), bodyOptions);
|
||||
|
||||
}
|
||||
}));
|
||||
|
||||
var renderOptions = _engine.render.options;
|
||||
};
|
||||
|
||||
Demo.stack = function() {
|
||||
|
|
Loading…
Reference in a new issue