создание игры, в которой мяч отскакивает от края экрана и не - PullRequest
0 голосов
/ 21 июня 2019

Я работаю над этим кодом из учебника по Udemy, где я пытаюсь сделать Pong. Я нахожусь на ранних стадиях и просто хочу, чтобы мяч отскочил от края экрана. Хотя это не так. Я думаю, что проблема может быть в том, где я определяю

ballspeedx = -ballspeedx

Вот мой код:

<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title></title>
</head>

<body>
  <canvas id="gameCanvas" width="800" height="600">
    
      </canvas>
  <script type="text/javascript">
    var canvas;
    var canvasContext;
    var ballx = 50
    var ballspeedx = 12;

    window.onload = function() {
      var FPS = 80
      setInterval(function() {
        moveEverything();
        drawEverything();
      }, 10000 / FPS)

    }

    function moveEverything() {
      ballx = ballx + ballspeedx;
      if (ballx > 800) {
        console.log("GREATER THAT 800")
        ballspeedx = -ballspeedx
        ballspeedx = ballspeedx + ballspeedx

        console.log("Hello?")
      }
      if (ballx > 0) {
        ballspeedx = 5;
      }

    }

    function drawEverything() {
      ballx = ballx + 5;
      console.log(ballx)
      canvas = document.getElementById('gameCanvas');
      canvasContext = canvas.getContext('2d')
      canvasContext.fillStyle = 'black';
      canvasContext.fillRect(0, 0, canvas.width, canvas.height);
      canvasContext.fillStyle = 'white';
      canvasContext.fillRect(0, 210, 20, 100);
      canvasContext.fillStyle = 'red';
      canvasContext.fillRect(ballx, 100, 10, 10);

    }
  </script>
</body>

</html>

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Проблема в блоке

if (ballx > 0) {
   ballspeedx = 5;
}

Если шарик находится на самом правом краю (800), он все равно больше нуля. Поэтому, даже если вы измените скорость (что и должно быть), это автоматически настроит ее на дальнейшее движение вправо. Я изменил вашу moveEverything() функцию на эту, и она работала нормально:

function moveEverything() {
  ballx = ballx + ballspeedx;
  if (ballx > 800 || ballx < 0) {
    ballspeedx = -ballspeedx;
    ballx += ballspeedx;
  }
}

Кроме того, вы не должны перемещать мяч в drawEverything(), это просто плохой дизайн.

0 голосов
/ 21 июня 2019

Попробуйте изменить это:

if (ballx > 0) {
    ballspeedx = 5;
}

до

  else if (ballx > 0) {
    ballspeedx = 5;
  }

Я думаю, что вы устанавливаете правильное значение шариковой скорости, а затем сразу переходите к следующему if и перезаписываете его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...