#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; }
Идея примерно такая:
И это сработало, но просто иногда бывают случаи, когда метеорит застревает вокруг корабля.
Они просто перемещаются по хитбоксу, и их даже не толкают, так что же я делаю плохого?
PD: Я не уверен, как я могу поделиться кодом, потому что с этим связано много вещей, и мне нужно проделать массу работы, чтобы оставить вам только необходимый код для обмена, когда должно быть проще просто передать вам весь код.