Как определить тяжелый предмет в Материи JS - PullRequest
1 голос
/ 22 апреля 2020

Чтобы лучше объяснить, что мне нужно, подумайте о баке и банке содовой. Независимо от того, какой будет скорость этой банки с газировкой, танк не будет двигаться, если его ударить. Но танк должен быть в состоянии двигаться, когда к нему применена сила.

Уже открыли вопрос здесь с более подробной информацией: https://github.com/liabru/matter-js/issues/841

И я также сделал пример вот для чего мне нужно.

var Engine = Matter.Engine,
  Render = Matter.Render,
  World = Matter.World,
  Bodies = Matter.Bodies,
  Body = Matter.Body;

var engine = Engine.create();
engine.positionIterations = 10;
engine.velocityIterations = 8;

var render = Render.create({
  element: document.body,
  engine: engine,
  options: {
    width: 800,
    height: 400,
    wireframes: false
  }
});

engine.world.gravity.y = 0;

var topWall = Bodies.rectangle(400, 50, 720, 20, { isStatic: true });
var leftWall = Bodies.rectangle(50, 210, 20, 300, { isStatic: true });
var rightWall = Bodies.rectangle(750, 210, 20, 300, { isStatic: true });
var bottomWall = Bodies.rectangle(400, 350, 720, 20, { isStatic: true });

var ball = Bodies.circle(100, 200, 5, { 
  friction: 0.05,
  frictionAir: 0.05,
  density: 0.001,
  restitution: 0.2
});

var bigBox = Matter.Bodies.rectangle(500, 200, 120, 120, {
  inertia: Infinity,
  frictionAir: 1,
  friction: 1,
  density: 0.1
});

World.add(engine.world, [topWall, leftWall, rightWall, bottomWall, ball, bigBox]);
Engine.run(engine);
Render.run(render);

// CMD + SHIFT + 7 to reload

$('.shoot').on('click', function () {
  var speed = 0.02;
  var angle = 0;
  let vector = Matter.Vector.create(Math.cos(angle) * speed, Math.sin(angle) * speed);
  Body.applyForce(ball, ball.position, vector);
});

https://codepen.io/dmerlea/pen/BaoQJYK

...