Нужна помощь с ботами
Делаю 2д игру. И во время программирования ботов столкнулся с проблемой: они проникают сквозь здания. А как сделать по другому не знаю. Помогите.
|
Ответ: Нужна помощь с готоми
Покажи код. Мы ж не знаем как у тебя столкновения устроены.
|
Ответ: Нужна помощь с готоми
|
Ответ: Нужна помощь с готоми
Цитата:
|
Ответ: Нужна помощь с готоми
В подобных случаях пишут "телепаты в отпуске" и не отвечают более на вопросы автора.
В подобных случаях ботов учат обходить препятствия при помощи алгоритмов "волна", "А*" ("А-звездочка", "A-star") и т.п. Определение препятствий можно возложить на артистов (моделлерами из не назовешь, а подходящего слова в русском/украинском языке я не вспоминаю пока :-P ), либо на простенький алгоритм. Вариантов алгоритма множество ;) Сам пробовал решив задачу "лабиринт", построить модель поведения тупого (буквально) бота. Получилось забавно =) Собственно, задача: Цитата:
|
Ответ: Нужна помощь с готоми
А где копать?:(
|
Ответ: Нужна помощь с готоми
Цитата:
|
Ответ: Нужна помощь с готоми
А алгоритм Дейкстры для таких случаев не подходит?
|
Ответ: Нужна помощь с готоми
Цитата:
|
Ответ: Нужна помощь с готоми
А зачем создавать вторую тему? В старой не помогли, в новой помогут? :)
|
Ответ: Нужна помощь с готоми
Цитата:
|
Ответ: Нужна помощь с готоми
И чем это алгоритм Дэйкстры сложнее Астара ?
Вопрос аффтару : Телепаты нынче действительно на расхват... поэтому ты опиши проблемму полностью. Вот я например не пойму в каком пространстве ты пытаешся сделать коллизии, если это платформер - то тут одно решение, если стратежка - то совершенно другое решение убережет тебя от готов. (+ спаси и сохрани +) |
Ответ: Нужна помощь с готоми
a в принципе там и объяснять нечего. Делаю 2д зомби шутер(движок отдаленно похож на гта 1) есть боты,которые идут на координаты гг. Мне нужно сделать так, чтобы они не проникали(проходили) сквозь сдания.
|
Ответ: Нужна помощь с готоми
if (бот_идет) and (впереди_по_ходу_движения_бота_здание) then бот_поворачивает_пока_впереди_не_будет_свободно
|
Ответ: Нужна помощь с готоми
Вот взяли и испугали парня. Его интересовало векторное перемещение, а вы ему алгоритмами А* и Дейкстры голову забили. Люди добрые, нельзя же так. |
Ответ: Нужна помощь с готоми
Цитата:
Уважаемый ТС, рассказываю максимально детально: 1) есть у вас карта. Разбейте ее на клетки размером с игроков (зомби/гг/союзники) - сделайте матрицу размерами M*N, где M = map_width / player_size, N = map_height / player_size, player_size = (player_width > player_height) ? player_width : player_height. 2) Заполните эту матрицу следующим образом: если в клетке A[i][j] препятствие - A[i][j] = -1; иначе - A[i][j] = 0. 3) Возьмите клетку в тупике (так нужно) и сделайте ее некоей start_cell{x, y}. 4) Примените волновой алгоритм: задайте некую очередь q = {start_cell}. И переменную index = 1. В цикле "пока очередь не пуста" выполняем следующее: а) current_cell = q.shift(); б) A[current_cell.x][current_cell.y] = index; в) index = index + 1; г) "если клетка A[i + 1][j] проходима - добавляем ее в очередь" д) "если клетка A[i - 1][j] проходима - добавляем ее в очередь" е) "если клетка A[i][j + 1] проходима - добавляем ее в очередь" ж) "если клетка A[i][j - 1] проходима - добавляем ее в очередь" *условие "если клетка проходима" равносильно "если в клетке число 0" Таким образом получаем "лабиринт", заполненный либо числом -1, либо натуральным числом. Так, чтобы из клетки A'(x1, y1) добраться в клетку B'(x2, y2) необходимо: а) выбрать "обратное направление хода" - от клетки с большим числом в матрице до клетки с меньшим числом в матрице. То есть, если A[x1][y1] > A[x2][y2], то искать путь будем от B' к A'. б) начиная с клетки с большим числом в матрице, начинаем искать путь (алгоритм идентичен волновому):
А потом все просто - в path у вас будет набор пар (x, y) - по ним можно определить, куда (в центр какой клетки) направить тот или иной спрайт =) |
Ответ: Нужна помощь с готоми
Цитата:
|
Ответ: Нужна помощь с готоми
Коллизия как раз решается векторным перемещением, обход препятствий его не интересовал. Можете ещё раз перечитать его посты.
|
Ответ: Нужна помощь с готоми
Вот тебе пример, тут и коллизии, и пики, чтобы определить, есть ли препятствие впереди и обойти его. CodeArchive тебе в помощь.
|
Часовой пояс GMT +4, время: 14:06. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot