Я хочу выпустить пулю 1 из игрока 1 и добавить счет, когда она попадет в игрока 2

#javascript #game-physics #matter.js

Вопрос:

Я пытаюсь сделать игру — стрелялку в matter.js в течение нескольких дней, но не могу найти способ стрелять пулями из точного местоположения игрока, а также в разделе столкновений, я просто хочу посчитать столкновение между игроком и пулей, а не со стенами

Я хочу выстрелить пулей из игрока 1, а затем при повторном нажатии D он должен выстрелить еще одной пулей из последней позиции игрока 1

Мой кодовый код этой игры

 let p1= Matter.Bodies.polygon(200, 200, 3, 40, {
    chamfer: {
        radius: [15,10,15]
    },
    isStatic: false,
      inertia: Infinity,
  friction: 0.9,
    render: {
        fillStyle: '#F9ED69'
    },
    mass:1
  
});
let p2 = Matter.Bodies.polygon(1100, 200, 3, 40, {
    chamfer: {
        radius: [15,10,15]
    },
    isStatic: false,
        inertia: Infinity,
    friction: 0.9,
    render: {
        fillStyle: '#11999E'
    },
    mass:1
  
});

let bullet1 = Matter.Bodies.polygon(400, 300, 3, 7, {
    chamfer: {
        radius: [4,2,4]
    },
    isStatic: false,
    inertia: Infinity,
    friction: 0.9,
    render: {
        fillStyle: '#F9ED69'
    },
  mass:0
});
const keyHandlers = {
  KeyS: () => {
    Matter.Body.applyForce(p1, {
      x: p1.position.x,
      y: p1.position.y
    }, {x: 0.0, y: 0.001})
  },
  KeyW: () => {
    Matter.Body.applyForce(p1, {
      x: p1.position.x,
      y: p1.position.y
    }, {x: 0.0, y: -0.002})
  },
    
  KeyD:()=>{
      Matter.Body.applyForce(bullet1, {
      x: p1.position.x,
      y: p1.position.y
    }, {x: 0.001, y: 0.0})
  },
};

const keysDown = new Set();
document.addEventListener("keydown", event => {
  keysDown.add(event.code);
});
document.addEventListener("keyup", event => {
  keysDown.delete(event.code);
});

Matter.Events.on(engine, "beforeUpdate", event => {
  [...keysDown].forEach(k => {
    keyHandlers[k]?.();
  });
});

// on collision of a bullet with wall and other bodies remove the bullet from the world after some delay and add the score
let score1 = 0;
let score2 = 0;
let health
Matter.Events.on(engine, "collisionStart", event => {
  for (let i = 0; i < event.pairs.length; i  ) {
    const pair = event.pairs[i];
    if (pair.bodyA === bullet1 || pair.bodyB === bullet1) {
      Matter.World.remove(engine.world, bullet1);
      alert('1');

    }
    if (pair.bodyA === bullet2 || pair.bodyB === bullet2) {
      Matter.World.remove(engine.world, bullet2);
      alert('2');
    }
  }

  score1  ;  
  alert(`SCore1 is ${score1}`); // these alerts are just to confirm the collision

});