Почему мяч проходит через весло в игре в сквошбол? - PullRequest
5 голосов
/ 09 октября 2019

Я работаю над еще одной игрой типа сквош-болл (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/

Мне бы хотелось, чтобы мяч подпрыгивал, когда к нему приближается весло, а также добавить увеличение скорости мяча от скорости лопасти.

...