![]() |
Избежание погрешностей (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% не разобрался как там сделали так, что он без проблем ходит)
|
Re: Избежание погрешностей (AI)
Мы тут так много наобсуждали)
Может попорядку? У меня есть массив, опираясь на который, я проверяю, можно ли туда пойти или нельзя Есть ИИ, и что бы он корректно останавливался у стенки, было небходимо ввести таймер! В результате у меня появились погрешности (или не из-за таймера)...и вот я прошу посоветовать\помочь мне...как же все-таик этих погрешностй избежать? |
Re: Избежание погрешностей (AI)
Не используй таймер, а делай так:
Двигаешь объект, и проверяешь координаты, если он на перекрёстке (сколько у тебя там квартал не знаю), то проверять на наличие стен и изменяй направление\двигай дальше. Тоесть не таймер используй а условие если координаты бота, совпадают с координатами перекрёстка (погрешности с координатами учитывай, т.к. они Везде!) |
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
If abs(EntityX(Bot)-PoloskaX)<.1
EndIf |
Re: Избежание погрешностей (AI)
Цитата:
У меня есть средтсва: en1\Understand_f=1 или 0 en1\Understand_b=1 или 0 en1\Understand_l=1 или 0 en1\Understand_r=1 или 0 Проверяют есть ли препядствие и с какой оно стороны |
Re: Избежание погрешностей (AI)
одна еденица - один метр.
будет z-buffer баловаться - camerarange() настрой. |
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
ето насчет масштаба.
насчет погрешностей, они тебе действительно мешают? игра плохо работает или тока текст ненравица? для сравнения вещественных чисел используй свою ф-ию, например: Код:
Function eq(a#,b#,e#=0.001) |
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
не думаю что погрешность увеличится. она будет скакать туда сюда но примерно в етом диапазоне.
|
Re: Избежание погрешностей (AI)
что-то у меня так не заладилось! Может есть другой способ? Например у меня есть массив, по которому движутся ии. Но дело в том, что когда он проверяет свободно ли впереди, то останавливается на полпути из-за округления..вообщем блин!. На первый взгляд казалось, что все так просто, а теперь почему-то проблемы
|
Re: Избежание погрешностей (AI)
Попробуй в корне пересмотреть алгоритм, и написать Заного новый, заместо того. Всё приходит с эксперементами.
|
Re: Избежание погрешностей (AI)
Цитата:
2 до него |
Re: Избежание погрешностей (AI)
Уже же говорили и в этой теме, и на форуме отдельно обсуждали: Это Глюк Блица! :)
|
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Тебе уже подсказали в этой теме, смотри на 1 странице ;)
Округляй. |
Re: Избежание погрешностей (AI)
видел я эту подсказку...только что именно округлять? Я так понимаю, что нужно округлять позицию ии, но я же не могу переставить просто перетащить объект куда нужно...хорошо. Не могли бы вы это на примере показать? Я же не просто так пишу...у меня трудности.
|
Re: Избежание погрешностей (AI)
Наконец-то я с ноута, а не с телефона! Я только не понял что именно нужно округлять, что бы добиться того, что мне нужно
|
Re: Избежание погрешностей (AI)
Получаешь координату объекта, округляешь и двигаешь в округлённую позицию.
Тока не всегда нада округлять. |
Re: Избежание погрешностей (AI)
Цитата:
Округлю ее по формул, которую мне тут любезно предоставили...мне не совсем ясно, как двигать этот самый объект к округленной позиции. |
Re: Избежание погрешностей (AI)
PositionEntity Entity,int(EntityX(Entity)),int(EntityY(Entity)),i nt(EntityZ(Entity))
|
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Вообщем я себе уже представляю как можно это все организовать, но возникла загвоздка! Как я узнаю (выполню проверку) что имеет место быть погрешность?
Вот тут мне привели пример: If Int(Position_X)-Position_X<.001 then Position_X=Int(Position_X) Я не совсем понял, как этим кодом можно проверить, есть ли погрешность? Или я чего-то тут недогоняю |
Re: Избежание погрешностей (AI)
Цитата:
Мысли лучше всего приходят во время кодинга, когда пробуешь, так и быстрее и лучше всего ;) |
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Fant неправ :)
Проверяй это всегда, но шаг поставь может поменьше, например не .001 а .05, ну это от скорости перемещения челов зависит, чтобы шаг нубыл больше чем четверть средней скорости перемещения (эо если сокрость изменяется сглажено), а если не сглажено тогда шаг делай половину макс скорости. |
Re: Избежание погрешностей (AI)
Цитата:
|
Re: Избежание погрешностей (AI)
Провел опыт:
If KeyDown(31) Then If Int(EntityZ(en1\obj))-EntityZ(en1\obj)<.001 Then PositionEntity en1\obj,EntityX(en1\obj),5,Int(EntityZ(en1\obj)) End If MoveEntity en1\obj,0,0,.1 Стабильно убирает сотые части, но так же стабильно держит .1 То есть делает погрешность в одну десятую |
Re: Избежание погрешностей (AI)
Шаг, это число которое щас .001.
А погрешность т.к. ты двигаешь после стабилизации. Сделай так: MoveEntity en1\obj,0,0,.1 If KeyDown(31) Then If Int(EntityZ(en1\obj))-EntityZ(en1\obj)<.001 Then PositionEntity en1\obj,EntityX(en1\obj),5,Int(EntityZ(en1\obj)) End If |
Re: Избежание погрешностей (AI)
Цитата:
Большое спасибо! П.с. у меня щас не числа .001, поэтому мне не ясно, что же все-таки это за загадочный шаг! |
Re: Избежание погрешностей (AI)
Шаг- это значение, на которое изменяется переменная-счётчик каждый проход цикла.
Пример: Код:
REPEAT REPEAT...FOREVER - схематический пример цикла; К- счётчик; N- шаг. P.S. В который раз тебя прошу: RTFM! |
Re: Избежание погрешностей (AI)
Шаг это оказывается step! Я бы сразу вспомнил!
Спасибо за разъяснение! p.s. в первый! |
Re: Избежание погрешностей (AI)
|
Re: Избежание погрешностей (AI)
Цитата:
А тут я просто недогодался сделать positionentity + int ... я просто недостаточно хитрый что бы так обойти ту поблему был! Какой учебник мне бы помог решить эту (именно данную) проблему? Ведь я знал обо всех этих командах. Я просто не сумел их применить на практике |
Re: Избежание погрешностей (AI)
Fant
Практика, практика, и ещё раз практика. И тогда будет Много Опыта, и уже такие простенькие прикольчики, будешь щёлкать как орешки. |
Re: Избежание погрешностей (AI)
Цитата:
Я сейчас на форуме задал вопрос, но как я могу практиковаться, ели даже не знаю с чего начать! Вот посди сам! Я даже знаю какой пример взять за основу, не говоря о том, что бы самому что-то писать! |
Re: Избежание погрешностей (AI)
Fant
Не хватайся за вуршины гор, возьмись за подножъе, и постепененько забирайся. Начни с меншего. Неважно можешь или нет. Главное пробовать, и всё. А вбивать себе в голову что "не можешь", не нужно, нужно просто сесть, и со временем мысли к тебе придут. ;) |
Re: Избежание погрешностей (AI)
Тема, я так понимаю,себя исчерпала и ушла в оффтоп (не без моих стараний). Закрыта. |
Часовой пояс GMT +4, время: 19:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot