Столкновение на основе плитки XNA - PullRequest
0 голосов
/ 02 февраля 2011

У меня есть карта тайлов размером 64 х 64 пикселя (10 строк, 10 столбцов). Я хочу обнаружить столкновение между движущимися единицами и любыми стенами или объектами. Как я могу держать юниты по центру на карте тайлов во время движения, а затем определить, должен ли юнит менять направление, не обновляя свою позицию в ближайшее время и не выбрасывая его из центра тайла?

Пример: если в TilePositionX = 3 есть объект, а TilePosition = 0, и этот объект заставляет юнит изменить свое направление, но всегда остается в центре. Если юнит движется прямо к объекту с коэффициентом XVelocity = 1.0f (это может быть любая скорость) каждое обновление. Нужно ли мне определять центральное положение блока, затем добавлять смещение и проверять, полностью ли я нахожусь на плитке? Я не могу найти хорошее решение для моей проблемы.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2011

То, как я справлялся с этим в некоторых из моих игр, заключалось в том, что я держал плитку и смещение в пикселях, плитка всегда остается неизменной, т.е. IE 1,2, а смещение в пикселях сдвигалось в отрицательную сторону на основе направления.Когда он становится больше размера плитки, мы сбрасываем его в ноль и добавляем или вычитаем соответствующий тип плитки.Оттуда становится довольно легко определить, попадаете ли вы в плитку, по которой вы не можете двигаться.

0 голосов
/ 08 февраля 2011

То, что я делал в аналогичной ситуации, заключалось в определении целевого пункта назначения (в пикселях), который был центром плитки, к которой он двигался, а затем каждое обновление перемещало блок ближе к этой цели.Только когда единица оказалась в центре плитки, она проверила новый пункт назначения.

Например: Единица A находится в координатах (0,0), которые в пикселях (32,32) (центрэта плитка) A движется к плитке (0,1), поэтому новый пункт назначения - (32,96).Каждое обновление устройство перемещается (0,1) пикселей вниз.Как только юнит является (32,96), который является центром фишки (0,1), он может затем решить, куда он будет двигаться дальше.

...