Почему он не обнаруживает столкновения с горизонтальной линией слева от двери - PullRequest
0 голосов
/ 26 марта 2020

Я борюсь с этим кодом в JS P5. Я пытаюсь сделать обнаружение столкновения с линиями. Он работает с вертикальными линиями, пока я не установлю переменную «distance_3» после «Расстояния_2», после этого она не будет работать. У меня также есть проблемы с обнаружением столкновения с первой горизонтальной линией. Я не знаю, является ли это объяснение моей проблемы достаточно хорошим, но если нет, обязательно скажи!

Может кто-нибудь сказать мне, почему? Вот строки кода, которые не делают то, что я хочу. Полный код можно увидеть по этой ссылке https://editor.p5js.org/Mohammad/full/uzCnEN_oG

  function draw() 
  {
  background(220);
  for (let i = 0; i < listOfPeople.length; i++) {
    listOfPeople[i].setupHuman();
    listOfPeople[i].move();
    listOfPeople[i].drawer();

    for (let h = 0; h < listHouses.length; h++) {
      listHouses[h].draw_house();

      /* Distances for the vertical lines  */
      lengthOfVerticalLine = check_distance(
        listHouses[h].x_1,
        listHouses[h].x_1,
        listHouses[h].y_1,
        0
      );
      /* The Horizontally line left for the door */
      lengthOfHorizontalLine_1 = check_distance(
        listHouses[h].x_2,
        0,
        listHouses[h].y_1,
        listHouses[h].y_1
      );

      /* Circle left bottom */
      distance_1 = check_distance(
        listOfPeople[i].x,
        listHouses[h].x_1,
        listOfPeople[i].y,
        listHouses[h].y_1
      );

      /* Circle top left*/
      distance_2 = check_distance(
        listOfPeople[i].x,
        listHouses[h].x_1,
        listOfPeople[i].y,
        0
      );

      /* Circle left for the door */
      distance_3 = check_distance(
        listOfPeople[i].x,
        listHouses[h].x_2,
        listOfPeople[i].y,
        listHouses[h].y_1
      );

      /* Collision with the vertical line (Method: line segment) */
      if (
        distance_1 + distance_2 + listOfPeople[i].radius >=
          lengthOfVerticalLine - 40 &&
        distance_1 + distance_2 + listOfPeople[i].radius <=
          lengthOfVerticalLine + 40
      ) {
        if (listOfPeople[i].randomerX == -1) {
          listOfPeople[i].randomerX *= -1;
          listOfPeople[i].randomerY *= -1;
          listOfPeople[i].x += 3;
        } else if (listOfPeople[i].randomerX == 1) {
          listOfPeople[i].randomerX *= -1;
          listOfPeople[i].randomerY *= -1;
          listOfPeople[i].x -= 3;
        }
      }

      /* Collision with the first Horizontally line  */
      if (
        distance_2 + distance_3 + listOfPeople[i].radius >= 140 - 0.1 &&
        distance_2 + distance_3 + listOfPeople[i].radius <= 140 + 0.1
      ) {
        if (listOfPeople[i].randomerY == -1) {
          listOfPeople[i].randomerX *= -1;
          listOfPeople[i].randomerY *= -1;
          listOfPeople[i].y += 3;
        } else if (listOfPeople[i].randomerY == 1) {
          listOfPeople[i].randomerX *= -1;
          listOfPeople[i].randomerY *= -1;
          listOfPeople[i].y -= 3;
        }
      }
    }
  }
}

...