Найдите ближайшую плитку вдоль дорожки - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть игра на основе плиток, и мне нужно найти ближайшую плитку в радиусе 32px. Допустим, пользователь находится на 400, 200, а пользователь щелкает на 500, 400. Мне нужно создать путь или линию от игрока до положения мыши при щелчке, и должна быть выбрана ближайшая плитка, которая находится ниже пути в пределах 32px (или 2 плитки). Карта выложена плиткой на 16px.

Доступен вызов функции для проверки наличия плитки в заданном положении плитки Map.at(x,y).

Я просто не знаю, какую математику использовать, чтобы решить это.

alt text

Блоки блоков в пределах 16px, красные - в пределах 32px. Серый блок - это плитка, которую нужно уничтожить, а синяя линия - невидимый путь между игроком и мышью.

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Если вы работаете в терминах координат тайла, проблема становится проблемой рисования линии от заголовка, в котором находится пользователь, до тайла, на котором была нажата мышь. Алгоритм рисования линии будет последовательно генерировать все плитки вдольпрямой путь между этими двумя плитками.Просто выберите первый, где Map.at (x, y) удовлетворяет вашим требованиям, и выйдите из линейного ящика.

Существует несколько алгоритмов рисования линий.Два простых: DDA и Брезенхэма .Оба генерируют дискретные «пиксели» (плитки в вашем вопросе) в правильном порядке.DDA - это простой выбор, если в вашем приложении можно использовать арифметику с плавающей точкой.Брезенхэма использует только целочисленную математику.

Generated tiles on path

0 голосов
/ 28 сентября 2010

При большом количестве игр не обязательно прямая линия, а поиск кратчайшего пути. Если вы идете туда, то вам стоит взглянуть на алгоритм A * .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...