Перемещение спрайтов между плитками в Изометрическом мире - PullRequest
3 голосов
/ 27 мая 2009

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

Примером этого может служить игра «Транспортный магнат», в которой поезда и вагоны часто наполовину в одной клетке, а наполовину в другой.

Ответы [ 3 ]

10 голосов
/ 27 мая 2009

Рисование спрайтов в нужном месте не так уж сложно. Формула проекции:

screen_x = sprite_x - sprite_y
screen_y = (sprite_x + sprite_y) / 2 + sprite_z

sprite_x и sprite_y являются значениями с фиксированной точкой (или плавающей точкой, если хотите). Как правило, точность фиксированной точки - это количество пикселей на плитке, поэтому, если размер вашей плитки составляет 32x16 (квадрат 32x32), точность будет равна 5 битам, т. Е. 1/32 от плитки.

Действительно сложная часть состоит в том, чтобы отсортировать спрайты в порядке, который отображается правильно. Если вы используете OpenGL для рисования, вы можете использовать z-буфер, чтобы сделать это действительно легко. Используя GDI, DirectX и т. Д., Это действительно сложно. Транспортный магнат не правильно отображает спрайты во всех случаях. У оригинального Transport Tycoon был самый ужасный движок рендеринга, который вы когда-либо видели. В нем реализованы три уровня масштабирования - три экземпляра массивного макроса masm. ТТ была написана полностью на ассемблере. Я знаю, потому что я портировал его на Mac много лет назад (и также сделал классную версию для комплекта разработчика PS1, хотя для этого потребовалось 6 Мб).

P.S. Одна из маленьких графических фигур в бунгало в игре была основана на доме, в котором жил Крис Сойер в то время. У нас возник соблазн добавить Ferrari, припаркованный на проезжей части, для версии для Mac, так как именно эту машину он купил с гонорарами.

4 голосов
/ 27 мая 2009

Посмотрите, как выполнять линейную интерполяцию (это довольно простая формула). Затем вы можете использовать это для параметризации перехода в одном диапазоне [0, 1]. Тогда у вас просто есть состояние в ваших спрайтах для хранения фактов:

  1. что они движутся
  2. Начальная и конечная точки
  3. Время начала и окончания (или время начала и продолжительность

и затем каждый кадр можно нарисовать в правильном положении, используя интерполяцию от начальной точки до конечной точки. После того, как вы превысили длительность, спрайт обновляется, чтобы не двигаться и позиционироваться в конечной точке / плитке.

0 голосов
/ 27 мая 2009

Почему вы думаете, что он прыгнет с плитки на плитку? Вы можете расположить свой спрайт в любой координате x, y.

Сначала создайте фоновый буфер экрана, а затем поместите спрайты поверх него.

...