【问题标题】:How do I make object fall on impact in Matter.js?在 Matter.js 中,如何使物体落在冲击力上?
【发布时间】:2023-02-26 13:30:28
【问题描述】:

我正在为一些图形使用 Matter.js 并想要这个矩形

let title = Bodies.rectangle(w / 2.4, height / 1.8, 300, 100, {
  isStatic: true,
})

获得isStatic: false 并在被一些正在下雨的圆圈击中时掉落。我做了一些广泛的谷歌搜索,但除了这个之外没有真正发现任何其他东西:

Events.on(engine, 'collisionStart', function (event) {
  event.pairs.forEach(function (obj) {
    console.log(
      'BodyA is static: ' + obj.bodyA.isStatic + '. BodyB is static: ' + obj.bodyB.isStatic
    )
  })
})

这给了我所有发生的碰撞,但我还没有想出如何在发生碰撞时设置isStatic: false。感谢你的帮助!

【问题讨论】:

    标签: javascript matter.js


    【解决方案1】:

    您可以在有问题的身体上拨打Matter.Body.setStatic(body, false) 以激活它。

    这是一个例子:

    const engine = Matter.Engine.create();
    const render = Matter.Render.create({
      element: document.body,
      engine,
      options: {width: 400, height: 400, wireframes: false},
    });
    
    const fallingBody = Matter.Bodies.rectangle(
      200, 0, 20, 20, {
        frictionAir: 0.1,
        density: 0.8,
        render: {fillStyle: "red"},
      },
    );
    const wall = Matter.Bodies.rectangle(
      200, 150, 400, 20, {
        frictionAir: 0.05,
        isStatic: true,
        render: {fillStyle: "green"}
      },
    );
    Matter.Composite.add(engine.world, [fallingBody, wall]);
    
    Matter.Events.on(engine, "collisionStart", event => {
      if (
       wall.isStatic &&
       event.pairs.some(e => Object.values(e).includes(wall))
      ) {
        Matter.Body.setStatic(wall, false);
      }
    });
    
    Matter.Render.run(render);
    Matter.Runner.run(Matter.Runner.create(), engine);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.19.0/matter.min.js"></script>

    【讨论】:

    • 谢谢,完美解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多