Ну смотри. Есть, допустим, стена, вписанная в прямоугольник, имеющий, как ты, наверное, знаешь, четыре стороны, каждая из которых имеет свои координаты в пространстве. Для того, чтобы проверить пересечение с этим прямоугольником, нужно, понятное дело, представить и твой объект в виде такого же прямоугольника. Чтобы тебе было более понятно, покажу на примере:
Код
public boolean intersects(Rectangle r1, Rectangle r2) {
return r1.x + r1.w > r2.x && r1.y + r1.h > r2.y && r1.x < r2.x + r2.w && r1.y < r2.y + r2.h;
}
Здесь происходит банальная проверка на вхождение одного прямоугольника в другой. Ниже пример кода, запрещающего игроку двигаться сквозь препятствия:
Код
public void tick() { //метод обновления логики игрока
float xa = 0; //переменные, определяющие смещение игрока
float ya = 0;
float spd = 2f;
if (Key.down(Keys.W)) ya -= spd;
if (Key.down(Keys.S)) ya += spd;
if (Key.down(Keys.A)) xa -= spd;
if (Key.down(Keys.D)) xa += spd;
Rectange r = new Rectangle(x + xa, y + ya, w, h); //w и h - размер объекта игрока
boolean stopped = false; //игрок пока может двигаться
for (Wall wall : walls) { //walls - список стен
if (r.intersects(wall.getBounds())) stopped = true; //getBounds() должен возвращать прямоугольник, в который вписана стена
//проверяем на пересечение с каждой из стен, если пересечение было, то запрещаем движение
if (stopped) break; //и прекращаем проверку
}
if (!stopped) { //если можно двигаться - двигаемся
x += xa;
y += ya;
}
}
Как-то так.