плитки столкновение с раздвижными вдоль стен
Я получил мяч, что я могу передвигаться по карте, состоящей из одинакового размера плитки. Игрок не должен ходить над черепицей, которая темнее и имеет черную границу. У меня есть многомерный массив плиток, которые я использую, чтобы проверить, какие плитки являются сплошными.
Я хотел бы, чтобы игрок скользил по стене, если он двигается как по горизонтали, так и по вертикали. Проблема в том, что если он это делает, он приклеивается к стене. Мне удалось заставить его работать отлично на каждой оси, но отдельно. Вот мой код для горизонтальной проверки коллизий:
if (vx < 0) {
// checks for solid tiles left of the player
if (level.isBlocked(i, j) || level.isBlocked(i, jj)) {
x = side * (i + 1); // moves player to left side of tile
vx = 0;
}
} else if (vx > 0) {
// checks for solid tiles right of the player
if (level.isBlocked(ii, j) || level.isBlocked(ii, jj)) {
x = (ii * side) - getWidth(); // moves player to right side of tile
vx = 0;
}
}
level.isBlocked() метод проверяет, что индекс массива занимает твердую плитку. i и j переменные - это индекс в массиве, в котором находится верхний правый угол игрока. ii и jj переменные - это индекс в массиве, в котором находится нижний правый угол игрока.
Это прекрасно работает, но если я добавить один и тот же кусок кода под но заменив х с у, Vx с иу и так далее проблема возникает. Поэтому я могу добавить горизонтальную или вертикальную обработку столкновений, и она работает, но не в одно и то же время. Я видел несколько статей, объясняющих, что я должен их отделять или что-то в этом роде, но я не очень разбирался в них. Как я могу проверить столкновение на обеих осях и сохранить эффект скольжения?
Можете ли вы описать более подробно проблемное поведение) в зависимости от желаемого поведения? Похоже, игрок может двигаться (с инерцией) в любом направлении, и если игрок движется в верхний правый угол и сталкивается с вертикальной стеной, вы хотите, чтобы игрок продолжал двигаться вверх, но не правильно? Что происходит сейчас? – angelatlarge
Если я двигаюсь влево и продолжаю двигаться после того, как я ударил стену, будет выполняться коллизионный код горизонтального кода и помешать мне пройти через стену. Если я тогда также перемещаю плеер, он выполняет горизонтальный и вертикальный коллизионный код, который заставляет игрока привязываться к верхнему левому углу плитки под тем, на котором он включен. То, что я хотел бы сделать, - это скользить по стене, чтобы он двигался вверх, точно так же, как вы описали. –