如何在Matter JS中定义重对象

时间:2020-04-22 11:11:35

标签: matter.js

要更好地解释我的需求,请考虑一个罐子和一罐苏打水。 无论苏打水罐的速度如何,如果碰到罐子,罐子都不会移动。 但是当施加力时,坦克应该能够移动。

已在此处打开了一个具有更多详细信息的问题: 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

0 个答案:

没有答案