matter.js 物理引擎的结果总是不同
Outcome always different in matter.js physics engine
我在 matter.js 物理引擎中创建了一个简单的动画,有几个物体碰撞并掉落在地上。
我注意到结果总是有点不同。你可以在这里看到:https://jsfiddle.net/95urgeqf/1/
var Engine = Matter.Engine,
Render = Matter.Render,
World = Matter.World,
Bodies = Matter.Bodies,
Body = Matter.Body;
// create an engine
var engine = Engine.create();
// create a renderer
var render = Render.create({
element: document.body,
engine: engine
});
// create two boxes and a ground
var boxA = Bodies.rectangle(400, 200, 80, 80);
var boxB = Bodies.rectangle(450, 50, 80, 80);
var ground = Bodies.rectangle(400, 610, 810, 60, { isStatic: true });
var circle1 = Matter.Bodies.circle(400, 200, 20, { isStatic: true }, 300);
var circle2 = Matter.Bodies.circle(600, 300, 20, { isStatic: true }, 300);
var circle3 = Matter.Bodies.circle(200, 400, 20, { isStatic: true }, 300);
Body.setVelocity(boxA, { x: 0, y: -10});
// add all of the bodies to the world
World.add(engine.world, [boxA, boxB, ground, circle1, circle2, circle3]);
// run the engine
Engine.run(engine);
// run the renderer
Render.run(render);
最引人注目的是左边的方块在落地时,落下的地方总是有点不同。
我的目标是创建一个始终表现相同的动画,因此只要具有相同的参数,左边的方块每次都应该以相同、相同的方式落在地上。
您必须使用相同的 种子。
Matter.Common._seed = 12345678;
无论如何,由于浮点运算的不同,您的动画在不同 platforms/browsers 上可能会有所不同。
如果您想要完全相同的行为,您需要使用 fixed point math。
更新:
您还需要在所有应用程序中使用种子随机数生成器 (for example)。
我在 matter.js 物理引擎中创建了一个简单的动画,有几个物体碰撞并掉落在地上。
我注意到结果总是有点不同。你可以在这里看到:https://jsfiddle.net/95urgeqf/1/
var Engine = Matter.Engine,
Render = Matter.Render,
World = Matter.World,
Bodies = Matter.Bodies,
Body = Matter.Body;
// create an engine
var engine = Engine.create();
// create a renderer
var render = Render.create({
element: document.body,
engine: engine
});
// create two boxes and a ground
var boxA = Bodies.rectangle(400, 200, 80, 80);
var boxB = Bodies.rectangle(450, 50, 80, 80);
var ground = Bodies.rectangle(400, 610, 810, 60, { isStatic: true });
var circle1 = Matter.Bodies.circle(400, 200, 20, { isStatic: true }, 300);
var circle2 = Matter.Bodies.circle(600, 300, 20, { isStatic: true }, 300);
var circle3 = Matter.Bodies.circle(200, 400, 20, { isStatic: true }, 300);
Body.setVelocity(boxA, { x: 0, y: -10});
// add all of the bodies to the world
World.add(engine.world, [boxA, boxB, ground, circle1, circle2, circle3]);
// run the engine
Engine.run(engine);
// run the renderer
Render.run(render);
最引人注目的是左边的方块在落地时,落下的地方总是有点不同。
我的目标是创建一个始终表现相同的动画,因此只要具有相同的参数,左边的方块每次都应该以相同、相同的方式落在地上。
您必须使用相同的 种子。
Matter.Common._seed = 12345678;
无论如何,由于浮点运算的不同,您的动画在不同 platforms/browsers 上可能会有所不同。
如果您想要完全相同的行为,您需要使用 fixed point math。
更新:
您还需要在所有应用程序中使用种子随机数生成器 (for example)。