Я работаю над еще одной игрой типа сквош-болл (paddle hit ball), использующей Javascript / HTML, и застрял в проблеме, которая кажется довольно распространенной в другом контексте, но, насколько я видел, яне нашел хорошего решения для этого случая. По сути, моя игра (в отличие от, скажем, понга) позволяет вам перемещать весло в любом направлении. Тем не менее, если весло движется слишком быстро в направлении движущегося мяча, мяч пройдет через него, вместо того, чтобы позволить ему отскочить.
Я пытался использовать скорость весла и мяча, чтобы предсказать следующее местоположениемяч, но он все еще кажется
Моя стратегия сводится к отслеживанию скорости весла и прогнозированию, где он будет дальше, а затем к ее пересечению, чтобы избежать потери координат при перемещениигрести быстро.
this.vx = this.x - this.lastX;
this.vy = this.y - this.lastY;
// predict next point
this.nextX = this.x + this.vx;
this.nextY = this.y + this.vy;
Затем в моем игровом цикле я изменяю скорость, если столкновение обнаружено из расчета точки
const { paddle, ball } = this;
const isBallGoingLeft = Math.sign(ball.vx) === -1;
const paddleX = isBallGoingLeft ? paddle.nextX + paddle.w : paddle.nextX;
const nextBallX = isBallGoingLeft ? ball.nextX : ball.nextX + ball.w;
// insersect function found here
// found here: http://paulbourke.net/geometry/pointlineplane/
if (
intersect(
ball.x,
ball.y,
nextBallX,
ball.nextY,
paddleX,
paddle.y,
paddleX,
paddle.y + paddle.h
)
) {
ball.x = isBallGoingLeft ? paddleX : paddle.x - ball.w;
ball.vx = -ball.vx;
}
Вы можете увидеть полную скрипку здесь: https://jsfiddle.net/r8f0mxjn/4/
Мне бы хотелось, чтобы мяч подпрыгивал, когда к нему приближается весло, а также добавить увеличение скорости мяча от скорости лопасти.