Пятница, 22 Ноября 2024, 21:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Городской трафик
SaladinДата: Суббота, 04 Августа 2012, 00:46 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Решил немножко понубить обсудить с вами решение проблемы реализации городского трафика.
Можно в пример взять любую из игр серии ГТА или например НФС.

У меня есть несколько вариантов решения, но у каждого свои минусы, и довольно существенные.
Первый вариант это чекпоинты. Машина едет от одного к другому используя скажем потеншиал степ для обхода препятствий между чекпоинтами (другие машины, посторониие предметы и т.д.), ничего сверхсложного. Собственно проблемы возникают в нескольких ситуациях наверняка, и неизвестно сколько еще подводных камней всплывет. Проблема номер раз - выбор следующего чекпоинта. Ближайший чекпоинт может находиться в направлении противоположном движению или на встречной полосе, что как бы исключает выбор ближайшего чекпоинта. Отсюда вытекает следующая проблема, нужно указывать к каким чекпоинтам можно ехать из текущей позиции. Это неприемлемо, ибо город может быть большой, количество чекпоинтов слишком велико для ручного редактирования, а автоматизировать не получится, слишком много вариантов.
Зато у этого метода громадный плюс - полностью случайное движение транспорта.

Второй вариант - пути. Путь можно проложить как душе угодно, на нем можно "заскриптовать" интересные моменты в поведении машин, с ними легче управиться чем с чекпоинтами и вообще это практически идеальный вариант. Самый главный минус это точность. Если машина отклонилась от позиции в которой проходит путь, она будет либо перепрыгивать моментально в нужную позицию, либо продолжать движение из новой позиции по пути относительно самого пути. Получается что транспорт превращается в болванчиков, которые не в состоянии маневрировать, а лишь следовать по пути. Также полностью "стационарная орбита" транспорта делает трафик немножко... однообразным. Придется делать огромное количество путей чтобы разбавить вариацию движения.

У кого какие будут предложения по устранению существующих проблем в обоих вариантах? А может быть кто нибудь придумает другие варианты реализации траффика? В общем у кого есть соображения - прошу отписаться.


Анбаннэд. Хэлоу эгин =)

Сообщение отредактировал Saladin - Суббота, 04 Августа 2012, 00:46
EshfordДата: Суббота, 04 Августа 2012, 02:32 | Сообщение # 2
Богиня Гамака ♥
Сейчас нет на сайте
Quote (Saladin)
Зато у этого метода громадный плюс - полностью случайное движение транспорта.

Что мешает машинам выбирать новый чекпоинт по его достижению, лол? Тут если подумать, можно еще разобраться. К тому же тут минус не в этом, минус как раз таки в "потеншиал степ". Твои машины будут тупо не объезжать другие а... Аб... Облизывая тереться и переезжать, лол.
Путями вообще не рекомендую это дело делать. Просто невозможно будет создать адекватное поеведение машины. Подумай над первым вариантом, о том, как сделать более умный "потеншиал степ".


Сообщение отредактировал Alexis-63 - Суббота, 04 Августа 2012, 02:35
SaladinДата: Суббота, 04 Августа 2012, 02:57 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Quote (Alexis-63)
Что мешает машинам выбирать новый чекпоинт по его достижению, лол?

Ничто не мешает. Вот картинка, она

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

Добавлено (04.08.2012, 02:57)
---------------------------------------------

Quote (Alexis-63)
минус как раз таки в "потеншиал степ"

Потеншиал степ взят для примера. Подойдет любой другой алгоритм поиска пути.
Quote (Alexis-63)
Просто невозможно будет создать адекватное поеведение машины.

Если рассматривать путь как последовательность заранее заданных чекпоинтов (точки пути), то вполне возможно.


Анбаннэд. Хэлоу эгин =)
EshfordДата: Суббота, 04 Августа 2012, 15:28 | Сообщение # 4
Богиня Гамака ♥
Сейчас нет на сайте
Saladin, Ах да, есть еще один способ же. Наверное совсем быдлокодский, но все же. Можно создать невидимый объект и пускать его по траектории, которую он будет выбирать случайно, а машину уже пускать за ним, лол. Но если реализовать выбор чекпоинта, то это будет даже лишним.
Quote (Saladin)
сли рассматривать путь как последовательность заранее заданных чекпоинтов (точки пути), то вполне возможно.

Когда машина будет идти по пути и в нее врежется главный герой, она просто не отреагирует. Или есть возможность создать более умные пути с реакцией на внешние факторы?

Помнится как раз таки из-за этой проблемы забросил тогда клон жта


Сообщение отредактировал Alexis-63 - Суббота, 04 Августа 2012, 15:29
VadichДата: Суббота, 04 Августа 2012, 16:12 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Привет тебе от Лукаса, и вот что он предлагает.
Ключевой момент - перекрестки, как у тебя на картинке. Доезжая до него, машина выбирает путь из x направлений по принципу наименьшей загруженности полосы.
Оценочная функция для нее:
1 вариант - сколько на пути машин до следующего перекрестка;
2 вариант - сколько до следующего + последующие суммарно на 1 уровень. Кол-во уровней можно увеличивать, тогда траффик по городу будет более равномерен.


UX/UI designer/artist, pixel artist, 2D
SaladinДата: Суббота, 04 Августа 2012, 21:43 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Quote (Alexis-63)
Saladin, Ах да, есть еще один способ же. Наверное совсем быдлокодский, но все же. Можно создать невидимый объект и пускать его по траектории

Нечто очень похожее у меня работает сейчас на путях. Препятствия не объезжает, но на путь возвращается если его оттуда вытолкнули или если на заносе снесло smile
Суть в том, что путь это набор точек, которые можно найти с помощью path_get_x() и path_get_y(). Мы просто делим путь условно на несколько частей и направляем машину к одной точке, а когда она ее достигает - к следующей. Путь для движения не используется вообще, только для нахождения следующей точки движения. Если машина слетит с маршрута, она двигается к ближайшей точке на пути а потом продолжает движение как обычно по маршруту. Там загвоздка в самом алгоритме передвижения, поэтому ищу другие способы.
Quote (Alexis-63)
Или есть возможность создать более умные пути с реакцией на внешние факторы?

Вычисление пути "на лету". Но для него опять таки нужны опорные точки в правильном порядке, т.е. по правильной полосе, в правильную сторону и т.д.
Quote (Vadich)
Привет тебе от Лукаса, и вот что он предлагает.

Хех, хоть один настоящий программист пытается помочь smile
Quote (Vadich)
Ключевой момент - перекрестки, как у тебя на картинке. Доезжая до него, машина выбирает путь из x направлений по принципу наименьшей загруженности полосы.
Оценочная функция для нее:
1 вариант - сколько на пути машин до следующего перекрестка;
2 вариант - сколько до следующего + последующие суммарно на 1 уровень. Кол-во уровней можно увеличивать, тогда траффик по городу будет более равномерен.

Проблема как раз в том, чтобы автоматизировать сам выбор. На встречную выезжать нельзя, хотя на ней есть чекпоинт и встречных на перекрестке аж три не считая той откуда приехала машина, разворачиваться в обратную сторону тоже нельзя.
Теперь прикинем, на сотне перекрестков будет 800 чекпоинтов, у каждого чекпоинта уникальный идентификатор. Чтобы выбрать правильный нужно указать текущему чекпоинту список идентификаторов других чекпоинтов, доступных для движения. В этом и загвоздка. Я конечно могу посидеть недельку или две, вручную расписывая направления для каждого чекпоинта, но это не то. Как мне автоматизировать выбор я понятия не имею.


Анбаннэд. Хэлоу эгин =)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг