2D-объекты застревают, когда они должны отскакивать или толкаться

#java #object #collision-detection #collision

Вопрос:

Следуя этой концепции:

концепция подпрыгивания

Где v_x=u_x и v_y=-e*u_y (e: эластичность объекта)

Я пытался заставить объекты (например, метеоры) в моей тестовой игре отскакивать, если у корабля (игрока) есть щит (также толкающий их, если он движется).:

 public boolean objectCollision(GameObject other) {  if (other instanceof MovingObject amp;amp; !(other instanceof UFO)) {  if (hasShield) {  double angle = getCenter().minus(other.getCenter()).getDirection();   MovingObject movingObject = (MovingObject) other;   Vector2D ref = movingObject.getCenter().minus(getCenter());   // Bouncing the object considering where collides with the player    if (Math.abs(height/2d * ref.x) lt; Math.abs(width/2d * ref.y))  movingObject.velocity.y *= -1;  else  movingObject.velocity.x *= -1;    movingObject.position = movingObject.position.plus(movingObject.velocity);   if (angle lt; Math.PI/4 amp;amp; angle gt; -Math.PI/4) {  // Push objects  movingObject.velocity = movingObject.velocity.plus(velocity);  }  }  }  return true; }  

Идея примерно такая:

как должен работать подпрыгивающий

И это сработало, но просто иногда бывают случаи, когда метеорит застревает вокруг корабля.

Метеорит застрял 1Метеорит застрял 2

Они просто перемещаются по хитбоксу, и их даже не толкают, так что же я делаю плохого?

PD: Я не уверен, как я могу поделиться кодом, потому что с этим связано много вещей, и мне нужно проделать массу работы, чтобы оставить вам только необходимый код для обмена, когда должно быть проще просто передать вам весь код.