MatterJS 预计算最终位置

问题描述 投票:0回答:3

我正在尝试创建一个简单的 2D 游戏,其中一个球落到地上,受到一些障碍物的影响,这些障碍物会改变球的最终位置。

我使用 MatterJS 作为 2D 物理引擎,但它实际上是不可预测的,使用相同的参数,我的球总是处于不同的最终位置。

有没有一种方法可以(立即)预先计算球的路径,将其保存到变量中并在需要时加载它以获得完全相同的路径?或者有没有办法准确预测最终位置?

javascript 2d game-physics matter.js
3个回答
2
投票

我找到了一种通过手动调用

Matter.Engine.update(engine)
并存储每帧球的位置来立即预先计算球的路径的方法。

然后我重置球的位置,设置

ball.isStatic = true;
并在每一帧手动移动它:

Matter.Events.on(engine, "afterUpdate", () => {
    if (positions.length > 0) {
        Matter.Body.setPosition(ball, positions.shift());
    }
});

0
投票

Matter.js 是确定性的。 唯一变化的参数是增量,即刻度线的周期。使用

Matter.Engine.update(engine, delta)
手动计时。


0
投票

一旦您在浏览器中渲染 Matterjs 并且需要确定性,您就必须保持

event.source.timing.lastDelta
相同。

您可以通过以下方式实现:

  1. 始终使用您在全局范围内保留的同一个
    Engine
    实例。
  2. 配置
    _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;

  1. 设置选项
    isFixed: true
    ,同时创建
    Runner

Runner.create({
    isFixed: true,
})

© www.soinside.com 2019 - 2024. All rights reserved.