我正在尝试创建一个简单的 2D 游戏,其中一个球落到地上,受到一些障碍物的影响,这些障碍物会改变球的最终位置。
我使用 MatterJS 作为 2D 物理引擎,但它实际上是不可预测的,使用相同的参数,我的球总是处于不同的最终位置。
有没有一种方法可以(立即)预先计算球的路径,将其保存到变量中并在需要时加载它以获得完全相同的路径?或者有没有办法准确预测最终位置?
我找到了一种通过手动调用
Matter.Engine.update(engine)
并存储每帧球的位置来立即预先计算球的路径的方法。
然后我重置球的位置,设置
ball.isStatic = true;
并在每一帧手动移动它:
Matter.Events.on(engine, "afterUpdate", () => {
if (positions.length > 0) {
Matter.Body.setPosition(ball, positions.shift());
}
});
Matter.js 是确定性的。 唯一变化的参数是增量,即刻度线的周期。使用
Matter.Engine.update(engine, delta)
手动计时。
一旦您在浏览器中渲染 Matterjs 并且需要确定性,您就必须保持
event.source.timing.lastDelta
相同。
您可以通过以下方式实现:
Engine
实例。_seed
和多归档三角函数:import trigf from 'trigfills';
import * as MatterJS from 'matter-js';
trigf.setmaths();
MatterJS.Common._seed = 13579; // random value but always the same
export default MatterJS;
isFixed: true
,同时创建Runner
Runner.create({
isFixed: true,
})