Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в гонках управляются вражеские машины ?


Страницы:   1 2 3

Кто---то ©   (2004-11-09 01:24:00) 

В смысле соперники. Врядли там какие-то сложные системы искусственного интеллекта. Или что там ? Кто-нибудь знает, или какие есть мысли, идеи ?


Кто---то   (2004-11-17 02:04:00) [1]


> Pentium133 ©   (16.11.04 10:56) [45]
> Кто---то ©   (16.11.04 3:44) [43]
> Я хочу к своей демке прилепить вэбскрипты,
> Что значит "вэбскрипты"?

Гы. ... Больше вопросов не имею. :)
http://www.dwscript.com


> Используй любой скриптовый движок.

Да ну ? А я оказывается говорил о чём то другом ...


Pentium133   (2004-11-16 10:56:00) [2]

Кто---то ©   (16.11.04 3:44) [43]
Я хочу к своей демке прилепить вэбскрипты,

Что значит "вэбскрипты"?
Кто---то ©   (16.11.04 3:44) [43]
непойму чего-то как это делается.

Используй любой скриптовый движок. Посмотри на http://www.torry.net/pages.php?id=280


Кто---то   (2004-11-16 06:40:00) [3]

Клонировал машину. Теперь их можно сделать несколько штук и переключаться с одной на другую кнопкой W.

http://dcegame.narod.ru/needfreespeed.html

Поигрался ехая к финишу всей стаей. Забавно.
Плохо только, что когда машин много fps резко падает. Ну, не умеет процессор быстро физику просчитывать. Не умеет и всё тут. :( Блин, обидно.


Кто---то   (2004-11-16 03:44:00) [4]


> Pentium133 ©   (15.11.04 10:33) [40]
>
> > А логику - скажу честно - не понял.
>
> Смысл - написание AI управления гонщиком! Игра для программистов.
> А вид треков, модели машин в таких играх на последнем месте.

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


> Cash ©   (15.11.04 11:53) [41]
> орграфа - для кольцевых гонок.

Не пугайте такими непонятными словами.


Da Stranger   (2004-11-15 18:01:00) [5]


> Если надо - помогу.

Лучше выложи исходники какой-нибудь простенькой демки...


Cash   (2004-11-15 11:53:00) [6]

{Прилеплюсь к обсуждению вейпоинтов}
Была у меня игрулина одна, с одним АИ-шником и одним плеером или двумя плеерами.
Дак, манеру движения своего [AI] противника я тоже изобразил в вейпоинтах. Карта 25ч15 клеток. По точке (Point-у) на клетку.

Самое важное, организация вейпоинтов была, на мой взгляд, вполне очевидной. Все множество точекя представил в виде графа. И при переходе механического друга (AI) на очередной вейпоинт, он выбирал среди связанных с данным вейпоинтов, а не методом тыка или очереди из массива.

Ну дак вот.
Могу присоветовать создать что-нибудь на подобии дерева- для не кольцевых или орграфа- для кольцевых гонок.

Далее дело техники. Если надо - помогу.

------------------------
 Все, что подчеркнуто - термины из Курса Дискретной Математики.


Pentium133   (2004-11-15 10:33:00) [7]


> А логику - скажу честно - не понял.

Смысл - написание AI управления гонщиком! Игра для программистов. А вид треков, модели машин в таких играх на последнем месте.


Кто---то   (2004-11-14 07:01:00) [8]

Посмотрел эту демку, думал из неё машин надыбать, и трэков. Но машин там мало, а трэки дурацкие какие то. Плоскостями идут. Обычно же дорога плавно переходит из одной плоскости в другую, а не как на лежачем полицейском ...

А логику - скажу честно - не понял. Может ещё поразбираюсь.


Кто---то   (2004-11-13 05:53:00) [9]


> Pentium133 ©   (12.11.04 10:41) [36]
> В инете есть такая игра RARS http://rars.sourceforge.net/

Заодно не подскажешь случайно, чем её компилируют ?


Кто---то   (2004-11-13 01:31:00) [10]


> Pentium133 ©   (12.11.04 10:41) [36]
> В инете есть такая игра RARS http://rars.sourceforge.net/
> Суть ее в том чтобы писать AI гонщигов для автогонок и устраивать
> между ними соревнования. Все в исходных кодах, правда на
> С, но думаю стоит тебе посмотреть может какую идею и подхватишь.

Для меня чтение Си-кода трудн о.

Физика машины в общем то ведь известна. Неизвестно только как ею управлять.

Вот добавил за сегодня проверку на угловую скорость. То есть скорость вращения. Идея в том, что если скорость вращения машины на повороте становится слишком большой, то значит её начинает заносить, и надо отпустить руль.
Непонятно только как связаны эти две скорости. Скорость движения со скоростью вращения, при которой начинается занос.

Непонятно ещё, что делать со скоростью в случае заноса. Затормозишь - развернёт. На газ давить - тоже глупо.


Pentium133   (2004-11-12 10:41:00) [11]

В инете есть такая игра RARS http://rars.sourceforge.net/
Суть ее в том чтобы писать AI гонщигов для автогонок и устраивать между ними соревнования. Все в исходных кодах, правда на С, но думаю стоит тебе посмотреть может какую идею и подхватишь.


Поручик   (2004-11-12 04:13:00) [12]


> Ну, вроде всё объяснил, ... если чего не забыл.

OK, завтра разберусь, сегодня плохо соображаю.


Кто---то   (2004-11-12 04:05:00) [13]

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 03:54:00) [14]

Steer - это куда колёса направлены.
Steer := EnsureRange(Steer, -0.50, 0.50);
0 - значит вперёд.

Домножение Steer на 0.55 - это плавное возвращать колёс назад, после очередного поворота. В принципе его надо сделать хитрее. Зависимым от DeltaTime, от скорости и т. д.


Кто---то   (2004-11-12 03:27:00) [15]

CurrentCheckPoint - тот чек-поинт который горит, на который едем, и на который стрелка указывает. Когда на него наезжаем, то делаем CurrentCheckPoint := CurrentCheckPoint +1 и едем на следующий.

CheckPoints1[CurrentCheckPoint].Point - это позиция X Y Z данного чекпоинта. Следующая точка - это CheckPoints1[CurrentCheckPoint +1].Point и так далее до последней. Когда доходит до последнего поинта, то переключаются на CheckPoints1[0].Point, помечаем рекорд круга и всё по новой.


Кто---то   (2004-11-12 03:21:00) [16]

CheckPoints1 - это массив с контрольными точками, которые синими шарами обозначаются.


type
 TCheck1 = record
   Point  : TAffineVector; // Чекпоинт.
   Radius : Single         // Радиус.
   Speed  : Integer;       // Желаемая скорость в этой точке. На будущее.
 end;

 CheckPoints1 : array of TCheck1; // Массив с чекпоинтами.


Кто---то   (2004-11-12 03:16:00) [17]

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 02:47:00) [18]

Можешь показать кусок кода, в котором высчитывается направление?
Есть одна идейка, про векторы. Не могу описать, в голове как-то абстрактно крутится, но конкретно смогу сказать лишь увидев код.


Поручик   (2004-11-12 02:19:00) [19]


> Вопрос как рулём гасить заносы ? Или как их
> недопускать ?

Из заносов как раз раскачиванием и выходят, поищи в сети уроки экстримального вождения, про физику машины в таких книгах много пишут.

Сейчас демку скачаю, посмотю и подумаю как с тремя векторами сделать.


Кто---то   (2004-11-12 01:41:00) [20]


> NikeOLD ©   (10.11.04 09:17) [26]
> Там просто пример AI, а не физики автомобиля. Так что скорость
> постоянная, но можно машину уводить с дороги и  тормозить
> кнопками (вперед она сама едет, вроде даже с ускорением).
> Если ее с дороги увести, то она потом на ближайшую к цели
> точку настраивается и возвращается на дорогу.


Сделал нечто подобное. Теперь в демке два вектора. Синий и белый. Синий - на ближайший чекпоинт, белый - параллелен кузову. Если синий смотрит вправо от кузова, то колёса поворачиваются вправо, если влево, то влево.

В результате, если ехать медленно, то машина будет плавно двигаться от точки, к точке. Видимо в играх не имитирующих физику так всё и работает. Но так как в демке как раз и имитируется физика, то машину на большой скорости начинает заносить в момент переходе от точки к точке. То есть когда вектор резко меняется с одной точки на другую.

Заносит сначала немного в одну сторону, потом сильнее в другую, раскачивает так, и разворачивает.

Вопрос как рулём гасить заносы ? Или как их недопускать ?

Другой вопрос, как саппроксимировать два-три чекпоинта, чтобы вычислять вектор направления машины в любой момент времени ? То есть если имеем позиции двух чекпоинтов и машины, куда должен смотреть вектор, чтобы соответсвовать плавной линии, между этими тремя точками ?

Демка там же : http://dcegame.narod.ru/needfreespeed.html
Чтобы включить автоматический руль, понажимайте на Y. Газ и томоз при этом не автоматические. :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо