Реагирование на столкновение тайловой карты в java

Мне просто интересно, как лучше всего отреагировать на столкновение 2d-карты тайлов в java.

У меня есть код, настроенный так, что когда прямоугольник Players пересекается с прямоугольником Tiles, который является частью 2-мерного массива прямоугольников (Rectangle [][] collRects), происходит столкновение.

Я знаю, как это настроить, но когда я запускаю программу, и Player сталкивается с плиткой, Player перемещается по краю внутренних плиток и в конечном итоге проходит через прямоугольники столкновения.

То, как я сейчас реагирую на столкновения, таково:

  1. С помощью операторов if я проверяю, с какой стороной тайла столкнулся игрок.
  2. У игрока есть переменная скорости, поэтому я установил нулевое значение на любой оси, по которой двигался игрок до столкновения.

Я думаю, что я пытаюсь сказать, как лучше всего реагировать на столкновение?

Помощь будет принята с благодарностью, спасибо.


person kocon12    schedule 22.12.2011    source источник
comment
пожалуйста, предоставьте более подробную информацию о том, как ваши спрайты перемещаются: свободно ли они перемещаются внутри карты? они перемещаются по какой-то сетке (как в пакмане)? сколько спрайтов может сталкиваться одновременно? 10? 1000?   -  person Gabriel Belingueres    schedule 23.12.2011
comment
Игрок может свободно перемещаться по тайловой карте.   -  person kocon12    schedule 23.12.2011


Ответы (1)


Если я правильно понимаю, кажется, вас интересует обнаружение столкновений между игроком (спрайтом) и тайлами (а не другими свободно движущимися спрайтами).

Для этого достаточно простой модульной арифметики, чтобы определить (из верхних левых (x, y) координат игрока), какой тайл сталкивается на карте.

Если предположить, что карта состоит из матрицы тайлов NxM, пронумерованных от 0...N-1 по горизонтали и 0..M-1 по вертикали, а размер тайла составляет 32x32 пикселя, то координата сталкивающегося тайла (i,j) является:

я = пол (игрок.x / 32);

j = пол (player.y / 32);

person Gabriel Belingueres    schedule 24.12.2011