Форум: "Игры";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизКак в гонках управляются вражеские машины ? Найти похожие ветки
← →
Кто---то © (2004-11-09 01:24) [0]В смысле соперники. Врядли там какие-то сложные системы искусственного интеллекта. Или что там ? Кто-нибудь знает, или какие есть мысли, идеи ?
← →
Поручик © (2004-11-09 01:30) [1]В простейшем случае боты ездят по waypoint"ам. Еще можно добавить немного интеллекта, типа: если сзади едет тачка, то не дать ей пройти и тд.
А вообще полет фантазии неограничен, надо только подумать.
← →
Кто---то © (2004-11-09 02:27) [2]А как быть с поворотами ? Они же плавные, а не от точки, к точке.
И как вообще по поинтам ? Тогда все враги сойдуться в одну толчку и столкнуться.
← →
Поручик © (2004-11-09 03:03) [3]Кто---то © (09.11.04 2:27) [2]
И как вообще по поинтам ? Тогда все враги сойдуться в одну толчку и столкнуться
Надо приблизительно по точкам, можно сделать какое-нибудь смещение, типа waypoint + 3-random(5). Плюс умную смену waypoint"ов (для обгона), еще возврат к waypoint"ам (если например потаранил я бота, и он с дороги свернул)
> А как быть с поворотами ? Они же плавные, а не от
> точки, к точке.
Повороты тоже по точкам, либо сделать много точек (это не сложно, за-то утомительно так как поворотов много, и для кажного точки рааставлять), либо поставить можно 4 - 5 точек, но написать, какую-нибудь систему, которая будет высчитывать вектор направления, основываясь на текущем векторе направления, векторе до следующей точки.
Ну а по ходу реализации всплывут другие проблемы, а начать надо с этого.
Если хочешь, чтобы, как в NFS, то месяцок уйдет на это, а тяп-ляп можно за пару дней сваять.
← →
Поручик © (2004-11-09 04:24) [4]Заинтересовался этой темой и поискал на GameDev.net. Там есть про искусственный интеллект в гонках по городу, а по трассе нет. Пойду, еще поищу.
← →
Кто---то © (2004-11-09 04:33) [5]А есть какой-нибудь пример реализации ?
← →
Поручик © (2004-11-09 04:49) [6]Кто---то © (09.11.04 4:33) [5]
У меня нет. За это деньги хорошие платят.
А ссылка с Gamedev.net (http://www.gamasutra.com/features/20010124/adzima_01.htm) ведет на Гамасутру и чтобы почитать эту статью, надо зарегестрироваться на сайте, мне неохото.
Что-то я спать хочу *_*, спокойной ночи(утра), буду сдесь завтра в 2 ночи по Москве.
← →
NikeOLD © (2004-11-09 08:50) [7]Пример есть в книжке Ламота, на С++.
Там они ездят по waypoint"ам, так же как и боты в CS бегают. Если машину выбивают с дороги, то она не возвращается в ту точку с которой ее старанили, а ищет ближайшую впереди.
А на поворотах этих точек становится больше, чем на прямых участках, вот и весь фокус. Кроме того в большинстве игр все машины едут в линеечку.
Самая реалистичная, на мой взгляд, игра с AI машин - Дальнобойщики 2.
← →
NikeOLD © (2004-11-09 08:52) [8]Статью эту если надо, могу на мыло скинуть, или сам зарегистрируйся, там много интересного.
← →
DeadMeat © (2004-11-09 19:27) [9]А еще можно сделать несколько вэйпоинтов. Чтобы можно было выбрать любой из них. Тогда не будет явно видно, что все едут одинаково...
---
...Death Is Only The Begining...
← →
Imp (2004-11-09 19:43) [10]Похожую тему ещё на Dev.Dtf.Ru обсуждали.
Программист AI, который этим занимался, в итоге сделал всё так, что AI пользуется теми же средствами ввода что и человек.
И обошелся без вейпоинтов.
← →
Кто---то © (2004-11-10 01:32) [11]
> NikeOLD © (09.11.04 08:52) [8]
> Статью эту если надо, могу на мыло скинуть, или сам зарегистрируйся,
> там много интересного.
Там же вроде и без регистрации статьи показывают. Просто кликаешь на крестик в левом верхнем углу и всё. Только статьи на английском, и потом в тонкостях разобраться сложно.
> NikeOLD © (09.11.04 08:50) [7]
> Пример есть в книжке Ламота, на С++.
> Там они ездят по waypoint"ам
А с какой скоростью они ездят ? И как этим управлять ? Машина же обычно не ездит с постоянной скоростью, а то разгоняется, то замедляется.
> Imp (09.11.04 19:43) [10]
> Похожую тему ещё на Dev.Dtf.Ru обсуждали.
> Программист AI, который этим занимался, в итоге сделал всё
> так, что AI пользуется теми же средствами ввода что и человек.
>
> И обошелся без вейпоинтов.
Ну и как же именно ? Или они сделали, но никому не скажут ?
> Поручик © (09.11.04 03:03) [3]
> Повороты тоже по точкам, либо сделать много точек (это не
> сложно, за-то утомительно так как поворотов много, и для
> кажного точки рааставлять),
Это легко. Просто едишь, да на кнопку кликаешь, чтоб точки запомнить.
Хочешь глянь чё получилось : http://dcegame.narod.ru/NeedFreeSpeed.html
← →
Кто---то © (2004-11-10 01:43) [12]
> Imp (09.11.04 19:43) [10]
> Программист AI, который этим занимался, в итоге сделал всё
> так, что AI пользуется теми же средствами ввода что и человек.
Используемые средства ввода - это что ? Изображение что-ли ?
То есть AI снимает скриншоты с экрана и по ниму ведёт машину ?
Тогда такому программисту в пору в Мерседес устраиваться. Поставят на Мерседес вэб-кам за 10 долларов, и пусть программа по скриншотам машину ведёт.
← →
Поручик © (2004-11-10 02:09) [13]Я пришел.
> Используемые средства ввода - это что ? Изображение
>что-ли ?
> То есть AI снимает скриншоты с экрана и по ниму ведёт
> машину ?
Ну зачем же так в лоб, карта же где-то хранится, вот он и смотрит по ней. Например через 2 метра поворот, надо начинать потихоньку рулить. Если дальше нет поворота, можно начать выравниваться.
> Хочешь глянь чё получилось :
> http://dcegame.narod.ru/NeedFreeSpeed.html
Щас заценю.
← →
Поручик © (2004-11-10 02:13) [14]Поручик © (10.11.04 2:09) [13]
Щас заценю.
Если дождусь, пока с народа скачается.
← →
Кто---то © (2004-11-10 02:15) [15]
> Поручик © (10.11.04 02:09) [13]
> Ну зачем же так в лоб, карта же где-то хранится, вот он
> и смотрит по ней. Например через 2 метра поворот,
Если бы это было так просто по 3ds-файлу определять. Да ещё в реальном времени.
← →
Поручик © (2004-11-10 02:26) [16]
> Если бы это было так просто по 3ds-файлу определять.
> Да ещё в реальном времени.
Про 3ds не знаю, карты в массиве обычно хранил и гонок не делал.
Не пошла твоя демка, пишет "Дай ОДУ.ДЛЛ, без нее работать не хочу"
← →
Кто---то © (2004-11-10 02:40) [17]
> Поручик © (10.11.04 02:26) [16]
> Про 3ds не знаю, карты в массиве обычно хранил и гонок не
> делал.
Как же можно трассу хранить в массиве ? Да и зачем, если для того графические форматы существуют ?
> Не пошла твоя демка, пишет "Дай ОДУ.ДЛЛ, без нее работать
> не хочу"
Я думал у тебя она есть. Она же к GLScene прилагается. Сейчас выложу.
← →
Кто---то © (2004-11-10 02:44) [18]Выложил. Там же.
← →
Поручик © (2004-11-10 03:04) [19]Кто---то © (10.11.04 2:40) [17]
Я думал у тебя она есть. Она же к GLScene прилагается. Сейчас выложу.
У меня даже Delphi нет.
← →
Кто---то © (2004-11-10 03:10) [20]
> Поручик © (10.11.04 03:04) [19]
Как ? Больше ничего не требует ?
← →
Поручик © (2004-11-10 03:20) [21]
> Как ?
Я вот так! Я не программирую вообще, а когда программировал, то на С++
> Больше ничего не требует ?
Нет, не требует.
Мне даже понравилась демка, правда на тормоз тачка вообще не реагирует и заносит ее по страшному. Но это уже кое-что, на основе этого можно сделать хорошую аркадную гонку,
Кстати советую делать игру в жанре Micro Machines, играл в Ignition? Игра - Класс, вот бы сделать наподобие ее. Игр типа NFS навалом, а про маленькие машинки почти нет. Буду рад помочь.
← →
Кто---то © (2004-11-10 03:36) [22]
> Поручик © (10.11.04 03:20) [21]
> Мне даже понравилась демка
Спасибо. :)
> правда на тормоз тачка вообще не реагирует
Тормозов там три. Пробел - 2 задних колеса, для заноса. Буква A - все четыри колеса, и Стрелка вниз или D - торможение двигателем, в смысле крутить его в обратную строну. Это самое слабое. Самое сильное - А.
> заносит ее по ее по страшному.
Можно переделать smd-файл. Там положения колёс определяется по скелету в smd-файле. Так, что если их раздвинуть, или сместить, то можно получить машину с другими характеристиками.
Кстати, какой рекорд круга у тебя ? Просто важно сделать так, чтобы на разных машинах игра шла с одинаковой скоростью.
> Кстати советую делать игру в жанре Micro Machines, играл
> в Ignition?
Нет, не видел.
В nfs Porsсhe, можно машины на маленькие менять, если код ввести соответсвующий.
Только боюсь, что смогу сделать только то, что смогу, а не то чего захочу.
← →
Поручик © (2004-11-10 04:04) [23]Рекорд 72 сек, несколько раз круто развернуло.
ФПС у меня 50-60(RIVA TNT2 16mb).
C smd поигрался, такую фишку замутил - машина стала маленькая и прыгала как ненормальная!
← →
Поручик © (2004-11-10 04:27) [24]
> Только боюсь, что смогу сделать только то, что смогу,
> а не то чего захочу.
Не унывай, мы поможем.
Пошел спать, буду завтра как обычно.
← →
Кто---то © (2004-11-10 04:40) [25]
> Поручик © (10.11.04 04:04) [23]
> Рекорд 72 сек, несколько раз круто развернуло.
> ФПС у меня 50-60(RIVA TNT2 16mb).
У меня 39.9 . ФПС 110-130 на 5200FX. Видимо скорость связана с ФПСом.
> C smd поигрался, такую фишку замутил - машина стала маленькая
> и прыгала как ненормальная!
Если очень маленькая, то там в принципе может возникать глюк один. Ещё подумаю над этим.
> Пошел спать, буду завтра как обычно.
Окей.
← →
NikeOLD © (2004-11-10 09:17) [26]
> > NikeOLD © (09.11.04 08:50) [7]
> > Пример есть в книжке Ламота, на С++.
> > Там они ездят по waypoint"ам
>
> А с какой скоростью они ездят ? И как этим управлять ? Машина
> же обычно не ездит с постоянной скоростью, а то разгоняется,
> то замедляется.
Там просто пример AI, а не физики автомобиля. Так что скорость постоянная, но можно машину уводить с дороги и тормозить кнопками (вперед она сама едет, вроде даже с ускорением). Если ее с дороги увести, то она потом на ближайшую к цели точку настраивается и возвращается на дорогу.
> Там же вроде и без регистрации статьи показывают. Просто
> кликаешь на крестик в левом верхнем углу и всё. Только статьи
> на английском, и потом в тонкостях разобраться сложно.
Не все там доступно. А английский знать надо, ничего в этом сложного нету.
← →
Кто---то © (2004-11-12 01:41) [27]
> NikeOLD © (10.11.04 09:17) [26]
> Там просто пример AI, а не физики автомобиля. Так что скорость
> постоянная, но можно машину уводить с дороги и тормозить
> кнопками (вперед она сама едет, вроде даже с ускорением).
> Если ее с дороги увести, то она потом на ближайшую к цели
> точку настраивается и возвращается на дорогу.
Сделал нечто подобное. Теперь в демке два вектора. Синий и белый. Синий - на ближайший чекпоинт, белый - параллелен кузову. Если синий смотрит вправо от кузова, то колёса поворачиваются вправо, если влево, то влево.
В результате, если ехать медленно, то машина будет плавно двигаться от точки, к точке. Видимо в играх не имитирующих физику так всё и работает. Но так как в демке как раз и имитируется физика, то машину на большой скорости начинает заносить в момент переходе от точки к точке. То есть когда вектор резко меняется с одной точки на другую.
Заносит сначала немного в одну сторону, потом сильнее в другую, раскачивает так, и разворачивает.
Вопрос как рулём гасить заносы ? Или как их недопускать ?
Другой вопрос, как саппроксимировать два-три чекпоинта, чтобы вычислять вектор направления машины в любой момент времени ? То есть если имеем позиции двух чекпоинтов и машины, куда должен смотреть вектор, чтобы соответсвовать плавной линии, между этими тремя точками ?
Демка там же : http://dcegame.narod.ru/needfreespeed.html
Чтобы включить автоматический руль, понажимайте на Y. Газ и томоз при этом не автоматические. :)
← →
Поручик © (2004-11-12 02:19) [28]
> Вопрос как рулём гасить заносы ? Или как их
> недопускать ?
Из заносов как раз раскачиванием и выходят, поищи в сети уроки экстримального вождения, про физику машины в таких книгах много пишут.
Сейчас демку скачаю, посмотю и подумаю как с тремя векторами сделать.
← →
Поручик © (2004-11-12 02:47) [29]Можешь показать кусок кода, в котором высчитывается направление?
Есть одна идейка, про векторы. Не могу описать, в голове как-то абстрактно крутится, но конкретно смогу сказать лишь увидев код.
← →
Кто---то © (2004-11-12 03:16) [30]
var
DeltaStear, NaprMove : Single;
...
Frm.GLArrowLine1.PointTo(VectorMake(CheckPoints1[CurrentCheckPoint].Point), YHmgVector);
if CarAct.CurrentFrame = 4 then begin // Когда включено автоподруливание.
DeltaStear := Frm.GLArrowLine2.Direction.Y -Frm.GLArrowLine1.Direction.Y;
NaprMove := Frm.GLArrowLine2.Direction.X -Frm.GLArrowLine1.Direction.X;
if (abs(DeltaStear) > 0.1) or (abs(NaprMove) > 1) then begin
if DeltaStear > 0
then Steer := Steer +DeltaTurn1
else
if DeltaStear < 0
then Steer := Steer -DeltaTurn1
end else Steer := Steer *0.55
end else ... //
0.1 - можно варьировать. Это чтобы лишний раз руль не дёргать.
Если NaprMove больше 1, то машина в обратную строну смотрит.
← →
Кто---то © (2004-11-12 03:21) [31]CheckPoints1 - это массив с контрольными точками, которые синими шарами обозначаются.
type
TCheck1 = record
Point : TAffineVector; // Чекпоинт.
Radius : Single // Радиус.
Speed : Integer; // Желаемая скорость в этой точке. На будущее.
end;
CheckPoints1 : array of TCheck1; // Массив с чекпоинтами.
← →
Кто---то © (2004-11-12 03:27) [32]CurrentCheckPoint - тот чек-поинт который горит, на который едем, и на который стрелка указывает. Когда на него наезжаем, то делаем CurrentCheckPoint := CurrentCheckPoint +1 и едем на следующий.
CheckPoints1[CurrentCheckPoint].Point - это позиция X Y Z данного чекпоинта. Следующая точка - это CheckPoints1[CurrentCheckPoint +1].Point и так далее до последней. Когда доходит до последнего поинта, то переключаются на CheckPoints1[0].Point, помечаем рекорд круга и всё по новой.
← →
Кто---то © (2004-11-12 03:54) [33]Steer - это куда колёса направлены.
Steer := EnsureRange(Steer, -0.50, 0.50);
0 - значит вперёд.
Домножение Steer на 0.55 - это плавное возвращать колёс назад, после очередного поворота. В принципе его надо сделать хитрее. Зависимым от DeltaTime, от скорости и т. д.
← →
Кто---то © (2004-11-12 04:05) [34]
Frm.GLArrowLine1.PointTo(VectorMake(CheckPoints1[CurrentCheckPoint].Point), YHmgVector);
В этой строке синей стрелке GLArrowLine1 задаётся направление на точку CheckPoints1[CurrentCheckPoint].Point в которой находится большой, синий, прозрачный шар, то бишь следующий чекпоинт.DeltaStear := Frm.GLArrowLine2.Direction.Y -Frm.GLArrowLine1.Direction.Y;
Здесь вычисляется разница между двумя стрелками по горизонтали. Если положительная, то значит чекпоинт с одной стороны, если отрицательная, то с другой от машины. Если ноль - то впереди.NaprMove := Frm.GLArrowLine2.Direction.X -Frm.GLArrowLine1.Direction.X;
Эта штука нужна, только чтобы понять, что машина развернулась задом наперёд. Если больше единицы, значит развернулась. Можно потом будет дополнительную логику сделать.
Ну, вроде всё объяснил, ... если чего не забыл.
← →
Поручик © (2004-11-12 04:13) [35]
> Ну, вроде всё объяснил, ... если чего не забыл.
OK, завтра разберусь, сегодня плохо соображаю.
← →
Pentium133 © (2004-11-12 10:41) [36]В инете есть такая игра RARS http://rars.sourceforge.net/
Суть ее в том чтобы писать AI гонщигов для автогонок и устраивать между ними соревнования. Все в исходных кодах, правда на С, но думаю стоит тебе посмотреть может какую идею и подхватишь.
← →
Кто---то © (2004-11-13 01:31) [37]
> Pentium133 © (12.11.04 10:41) [36]
> В инете есть такая игра RARS http://rars.sourceforge.net/
> Суть ее в том чтобы писать AI гонщигов для автогонок и устраивать
> между ними соревнования. Все в исходных кодах, правда на
> С, но думаю стоит тебе посмотреть может какую идею и подхватишь.
Для меня чтение Си-кода трудно.
Физика машины в общем то ведь известна. Неизвестно только как ею управлять.
Вот добавил за сегодня проверку на угловую скорость. То есть скорость вращения. Идея в том, что если скорость вращения машины на повороте становится слишком большой, то значит её начинает заносить, и надо отпустить руль.
Непонятно только как связаны эти две скорости. Скорость движения со скоростью вращения, при которой начинается занос.
Непонятно ещё, что делать со скоростью в случае заноса. Затормозишь - развернёт. На газ давить - тоже глупо.
← →
Кто---то © (2004-11-13 05:53) [38]
> Pentium133 © (12.11.04 10:41) [36]
> В инете есть такая игра RARS http://rars.sourceforge.net/
Заодно не подскажешь случайно, чем её компилируют ?
← →
Кто---то © (2004-11-14 07:01) [39]Посмотрел эту демку, думал из неё машин надыбать, и трэков. Но машин там мало, а трэки дурацкие какие то. Плоскостями идут. Обычно же дорога плавно переходит из одной плоскости в другую, а не как на лежачем полицейском ...
А логику - скажу честно - не понял. Может ещё поразбираюсь.
← →
Pentium133 © (2004-11-15 10:33) [40]
> А логику - скажу честно - не понял.
Смысл - написание AI управления гонщиком! Игра для программистов. А вид треков, модели машин в таких играх на последнем месте.
Страницы: 1 2 вся ветка
Форум: "Игры";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.043 c