![]() |
Избежание погрешностей (AI)
Вложений: 2
Вообщем сделал я простенький ИИ для игры, но когда он "поворачивает" то координаты, по которым он "ездит" сбиваются немного
На картинке показано, что Position_X = 69,9995 Как мне избежать таких погрешностей? |
Re: Избежание погрешностей (AI)
Position_X=Int(Position_X)
обратно всё исправит. Это баг блица, уже не раз обсуждалось. О! Мак? Как вообще на маках живётся? ;) |
Re: Избежание погрешностей (AI)
Цитата:
Попробую по твоему совету щас сделать... |
Re: Избежание погрешностей (AI)
Но! Делать не постоянно, а например когда нужно, например:
If Int(Position_X)-Position_X<.001 Position_X=Int(Position_X) Или лучше самому прописывать в с определённым условием, более стабильным. |
Re: Избежание погрешностей (AI)
Цитата:
Вот так он у меня "ходит" en1\timer#=en1\timer#+en1\speed# If en1\timer#<=10 Then en1\speed#=.1 Else en1\speed#=0 If en1\timer#>=10 And en1\understand_f=0 Then en1\timer#=0 если таймер больше 10 и впереди свободно, то таймер опять на 0 И впринципе это работает без погрешностей, но вот когда ИИ производит поворот (из-за стены) или упирается в стену, то тут начинается... |
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Тут уже нужно делать проверку на текущее положение в определённой оси, т.к. как понял у тебя всё поле будет поделено на вертикальные и горизонтальные оси, поэтому и проверяй, а при несоответствии координат к оси, уже двигай.
Еслу у тебя они двигаються и не налезают на перегородки, то и колизия вообще не нужна, т.к. с ней гемороя на свою голову только. Если погрешность, то менять координаты и ставить на место. |
Re: Избежание погрешностей (AI)
Цитата:
У меня ИИ сделан через массив. И проверяется, если впереди 0, то свободно. |
Re: Избежание погрешностей (AI)
Fant, сорри, это применимо к C\C#\C++.
А почему бы тебе просто не использовать целые числа? Целые прибавлять, целые отнимать. И все у тебя будет int :crazy: |
Re: Избежание погрешностей (AI)
Может ему нужна скорость 0.04, а не 1, например ? ;)
|
Re: Избежание погрешностей (AI)
Цитата:
1. Проверить есть ли препядствие 2. Пустить таймер до 10. Тогда он уткнется в стенку Таймер у меня целый. От 1 до 10 считает (>=10) А вот скорость ИИ должна быть .1 иначе быстро получается |
Re: Избежание погрешностей (AI)
Значит у тебя двух мерный массив - карта проходимости.
Тогда зачем таймер? Если можно просто двигать его, и проверять в карте проходимости: стоит ли по направлению объект, если да, то поворачивать, тут стадия бота с "Идти", меняется на "Поворачивать "+тут нужно проверять по карте проходимости, если справа пусто то "90", если слева пусто "-90", если и там и там пусто, то или то или другое, а если занято, то 180 или -180, и параметр, в который запишешь начальный градус перед поворотом, он будет делиться на 90, дальше в цикле, выбираем режим поворота, и соответственно, положительное\отрицательное, в ту сторону и крутим, и проверяем на разницу текущего градуса и начального перед началом поворота, если она (разница), будет больше\меньше (зависит положительное или отрицательное), то поворачивать его опять только на тот же градус (малоли погрешность), и переходить в режим "Двигать". Надеюсь система понятна? ;) Цитата:
Цитата:
|
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Цитата:
Local obj_x = Int((EntityX (obj)/10)) Local obj_z = Int ((EntityZ (obj)/10)) Округление) И получается, что когда ИИ (или даже игрок) зайдет большей половиной на клетку, то происходит проверка и он останавливается на полпути ИБО дальше не идет так как там якобы "препядствие". Для этого я установил таймер. Когда срабатывает "якобы препядствие" я отсчитываю еще 10 и получаю что ИИ упирается в стенку |
Re: Избежание погрешностей (AI)
Вот игрок у меня, например, без всяких погрешностей. Но там и константы (просто движения игрока не я делал и я в принципе на 100% не разобрался как там сделали так, что он без проблем ходит)
|
Часовой пояс GMT +4, время: 04:37. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot