#java #collision-detection
#java #обнаружение столкновений
Вопрос:
В java-игре, которую я создаю, у меня есть проигрыватель и настенная плитка. Когда игрок движется вперед, он проверяет, сталкивается ли он со стеной в этом коде:
player.moveForward2(playerSpeed); //moves player forward
for (int i = 1; i <=100; i ) {
for (int j = 1; j <=50; j ) {
map1.map[(int) (i-1)][(int) (j-1)].getRect(); //gets rectangle from object on screen
player.getRect();
if (player.r.intersects(map1.map[(int) (i-1)][(int) (j-1)].r)) { //checks if player is intersecting rectangle after moving
if (map1.map[(int) (i-1)][(int) (j-1)].id == 3) { //checks that player isn't able to pass through this tile
player.moveBackward2(playerSpeed); // moves back if space cannot be moved into
}
}
}
}
Проблема в том, что когда он перемещается в прямоугольник, он застревает и не может двигаться ни в каком направлении. Метод предназначен для того, чтобы позволить ему перемещаться в прямоугольник и скользить по нему, не застревая на нем. Игрок находится в центре экрана, и другие плитки перемещаются, если это что-то значит.
Комментарии:
1. здесь много неизвестных. пожалуйста, поделитесь подробностями о методах, что они делают, и nit: почему вы набираете
(int) (i-1)
тип?? обаi
иj
уже определены какint
.2. @roottraveller Сначала запускается
moveForward2()
метод в проигрывателе, который изменяет координаты, сохраненные в проигрывателе, что влияет на то, где рисуются плитки. Он выполняет итерацию по остальной части кода для каждой плитки, сначала получая прямоугольник вокруг проигрывателя и плитки, указанной циклами for , затем проверяя, пересекаются ли прямоугольники. если они это делают, это перемещает игрока в противоположную сторону. Что касается приведения типов, это была ошибка, я скопировал циклы из предыдущего метода, где они были необходимы.3. все еще не очень понятно.
player.getRect();
что это делает? возвращает ли оно какое-то значение? можете ли вы обновить правильную постановку задачи?