Я борюсь с этим кодом в 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;
}
}
}
}
}