Тема: KoLoBoK racing
Показать сообщение отдельно
Старый 19.05.2010, 10:06   #17
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: KoLoBoK racing

Мысль есть одна. Так как гонки идут по внутренней части трубопровода и на его стенках должны быть как препятствия, так и бонусы вроде ускорения, можно сделать невидимые треки-полоски по которым будут гнать компьютерные оппоненты. Допустим труба состоит из 16 продольных полос, а аи просто переходит с одной на другую. Если впереди есть препятствие, которое привязано к одной из полос, то АИ проверяет, если он находится на этой полосе, то начинает сворачивать на другую полосу (сложность АИ варьируется скоростью реакции на препятствия/бонусы и скоростью сдвига).

Можно например задать радиус реагирования аи на объекты на трассе, и если он находится на одной полосе с препятствием - проверяет расстояние до него простой EntityDistance. Хотя можно и учитывать рельеф участка трассы, для этого не обязательно вычислять расстояние до цели по кривой трека, можно написать функцию, определяющую угол поворота препятствия относительно текущего угла поворота болида АИ. То есть, если взять конкретный аи за центр координат и относительно него вычислять поворот препятствия, учитывая радиус сечения трубы-трассы можно определить, будет ли это препятствия например за углом и снизить радиус реагировать (типа не видел), или наоборот оно видно впереди издалека и повысить радиус реагирования.

Можно еще сделать для каждого препятствия изменяемый радиус реагирования, чтобы типа АИ запоминал, если первый раз повернув за угол он врезался в "столб", то для этого препятствия изменить радиус реагирования на более широкий, чтобы в следующий раз он его видел уже как-бы через стенку и заранее начал сворачивать - типа запомнил.

з.ы. все тоже самое, только с обратным принципом реагирования можно сделать для бонусов.
(Offline)
 
Ответить с цитированием