Мы с другом разрабатываем головоломку сверху вниз.
Мы уже реализовали класс игрока, который может ходить и сталкиваться со стенами, но проблема заключается в самом столкновении.
Например:
Когда игрок касается стены справа, мы устанавливаем скорость на оси x
равной 0, и игрок останавливается.Но после этого, если пользователь нажимает клавишу up , игрок перемещается на один пиксель вверх, а затем снова останавливается.
После этого, если вы продолжаете нажимать вправо и вверх поочередно, игрок проходит черезстена пиксель за пикселем.
Игрок проходит сквозь стену
А вот обнаружение столкновения игрока:
for (int i = 0; i < lvl.getSizeInTiles().x; i++) {
for (int j = 0; j < lvl.getSizeInTiles().y; j++) {
if (lvl.getTileFromBuffer(i, j).getType() == "wall") {
if (intersects(lvl.getTileFromBuffer(i, j).getPosition().x, lvl.getTileFromBuffer(i, j).getPosition().y, lvl.getTileFromBuffer(i, j).getSize().x, lvl.getTileFromBuffer(i, j).getSize().y)) {
if (faceDirection == "UP" && vel.y < 0) {
collidesUp = true;
}
else {
collidesUp = false;
}
if (faceDirection == "DOWN" && vel.y > 0) {
collidesDown = true;
}
else {
collidesDown = false;
}
if (faceDirection == "LEFT" && vel.x < 0) {
collidesLeft = true;
}
else {
collidesLeft = false;
}
if (faceDirection == "RIGHT" && vel.x > 0) {
collidesRight = true;
}
else {
collidesRight = false;
}
}
}
}
}
}
if (vel.x > 0 && !collidesRight) {
pos.x += vel.x;
}
if (vel.x < 0 && !collidesLeft) {
pos.x += vel.x;
}
if (vel.y > 0 && !collidesDown) {
pos.y += vel.y;
}
if (vel.y < 0 && !collidesUp) {
pos.y += vel.y;
}
Просто краткая заметка: Функция intersect(x, y, w, h)
является частью класса игрока, и сообщите нам, если вам нужно ее увидеть.
Мы будем рады, если выотправьте ответ о нашем коде или свяжите нас с тем местом, где мы сможем найти решение.
Так что спасибо вам за любую помощь и, если нужно, задайте вопросы, Арад и Рон.