首页 > 解决方案 > 如何在 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

标签: matter.js

解决方案


推荐阅读