![]() |
Искуственный интеллект
Вложений: 1
Доброго времени уважаемые буленчане!
Хочу реализовать ИИ на движке Блитц3Д+Ксорс+Физикс. Помогите обойти грабли, на которые вы сами наступали при такой реализации. Хотелось бы реализовать как на рисунке справа. Сложно ли это будет сделать? Стоит ли маршрут просчитывать динамически в реалтайме, либо строить вейпоинты? Если вейпоинты, то где их удобнее хранить, в самом типе ИИ либо в отдельном массиве? Для прогнозирования встречи с препятствием что лучше использовать, Pick,Collided(Xors'a), RayCast(PhysX'a)? |
Ответ: Искуственный интеллект
Кури A* - самое простое для новичка
http://ru.wikipedia.org/wiki/%D0%90%...D0%BA%D0%B0_A* Или если хочешь повозиться с матрицами, то волновой аглогитм http://ru.wikipedia.org/wiki/%D0%92%...B8%D1%82%D0%BC |
Ответ: Искуственный интеллект
Ребят, можно без всякого научного бреда?
Может в математике это эффективно, но если ты начнешь проверять как в вики каждую точку на пересечение с объектом в 3д мире - комп загнётся от таких А-звезд и волновых эффектов. А вообще такие методы у меня изображены на левом рисунке. По сути я могу спокойно двигать ncp пока он не упрётся в стену -> если упёрся повернуть в сторону -> пройти прямо -> поворачиваться к цели -> упёрся -> .... Работать будет Намного быстрее |
Ответ: Искуственный интеллект
Ну тогда используй точки перемещения. Самый простой и быстрый вариант.Только персонажи будут бегать по одной линии следования. Или тебе нужна готовая библиотека поиска пути.
|
Ответ: Искуственный интеллект
Да хоть что-нибудь чтоб оттолкнуться..
Как понимать Точки перемещения?? |
Ответ: Искуственный интеллект
Цитата:
Кстати можно было и поискать по форуму. Астар на блице. |
Ответ: Искуственный интеллект
Ну и что, астар.. Ты понимаешь какой в методе принцип складывается. Что для блитца на такой метод надо кучу ентити создать и проверять между ними расстояние, а теперь добавь туда еще и препятствия и получится попа!
|
Ответ: Искуственный интеллект
тебе для вейпоинта(точки перемещения) нужны лишь координаты, никакие ентити тут не нужны
|
Ответ: Искуственный интеллект
Вложений: 1
Давайте я попробую пример сделать, на основе (если помните по информатике проходили) типа метод пузырька или чтото вроде того
Хочу попробывать так, как на рисунке в аттаче Но для этого надо будет добавлять чтото типа графов Подскажите только плиз как в тип добавлять подтипы? Т.е. маленький пример, я пойму, просто не хочется гуглить с моим мертвым интернетом.. |
Ответ: Искуственный интеллект
burovalex
в кваке третей поиск пути был через пространственных граф параллелепипедов которые задавали объемы в которых мог свободно гулять персонаж, а связи между объемами - это как персонаж должен перейти (например прыжок или присесть) отсюда боты из третей кваки работали на любой карте, и это не тормозило в 1999, почему более простой алгоритм (Astar) будет тормозить у тебя в 2013 ? а то что ты показал в первом посте на левой и правой карте это всего лишь как персонаж идет по найденому пути, достаточно идти по квадратному пути с простой кубической интерполяцией и получишь то что на правой части картинки ps. алгоритмы поиска пути всегда работают на графах, в том числе и Astar, то что он в статьях для блица ищет по 2д массиву - просто абстракция чтобы упростить понимание |
Ответ: Искуственный интеллект
Наверное надо было уточнить, что мой мир динамичный - с растущими деревьями, и меняющимися препядствиями. Вот теперь представь выросший небольшой лесок, надо обойти деревья. Как в кваке со статичной картой такое не проканает, ну точнее надо будет постоянно обновлятьих, да и придется всё таки создавать ентити кучу.
А мне то надо сделать так, чтобы встретил зверушку, она шугнулась, и начала строить себе маршрут отступления. |
Ответ: Искуственный интеллект
Вот у меня сейчас терраин 64х64 и это так - средненький островок.
Использую я конечно 30-40% суши, НО я сейчас тестил этот пример Астар и он выдал время обработки 4 мс - вот теперь прикинь что будет допустим 5 шуганутых зверюшек - и комп повесится вот исходник со встроенным Астаром |
Ответ: Искуственный интеллект
Так на вопросы и не ответили
Цитата:
Цитата:
|
Ответ: Искуственный интеллект
Цитата:
http://forum.boolean.name/showpost.p...50&postcount=2 Как уже сказали, если тебе нужно примитивное перемещение по вейпойнтам, тогда о каком "искусственном интеллекте" идет речь? |
Ответ: Искуственный интеллект
В играх типа Doom3 и прочих, нафигация монстров по коридорам и игре вобщем сделана вейпоинтами, с поиском пути по ним и прочее.
А микро-перемещения реализуются уже анализом положения преград по близости. Подскочить к игроку например, или окружить его, поползать по стенам. |
Ответ: Искуственный интеллект
Не обижайтесь, но с вами говоришь как со стенкой, вам одно, вы другое.
Может я чтото не понимаю... У меня нет коридоров, чтобы поставить две точки одну в начале, другую в конце. У меня остров, ростут пальмы, т.е. появляются преграды. У меня изначально не неда никаких вейпоинтов. Понимаю когда есть помещение, надо нцп знать где есть проход а где нет. У меня то наоборот, надо знать где нельзя пройти. Ребят, ну подскажите ответы на вопросы ниже, я не могу гуглить, у меня скорость 32 кб/сек. - не издевайтесь ) Цитата:
|
Ответ: Искуственный интеллект
Не осилил весь код, некогда, мне хватило Dim. Перепиши на куче (а лучше посмотри готовый пример), и получишь ускорение на несколько порядков.
Я сам писал a* через массив, вышло ооочень медленно. Типа того, что на карте 512х512 был поиск несколько секунд. |
Ответ: Искуственный интеллект
Цитата:
|
Ответ: Искуственный интеллект
Тебе ответили - A* с выделением памяти на куче.
Не хочешь делать нормально, бери Пик, Коллизии, делай тесты. А потом я нарисую тебе пример, на котором твое прогнозирование загонит бота в тупик или цикл. |
Ответ: Искуственный интеллект
ок ;)
Да я не против пользоваться таким методом, но мне кажется для начинающего должно быть чтото попроще... И не понял что означает выделение памяти на куче Блин, мне так и не подсказали как в типе сделать подтип. Чтобы к нцп добавлять вейпоинты. |
Ответ: Искуственный интеллект
Кучи, это читать в хелпе про Heap. Блитц у меня не стоит уже лет 7, так что точнее не скажу. Кстати, вспомнил про еще более классную штуку, к тому же совсем свежую: http://habrahabr.ru/post/162915/
Подтипов тут нет честных, не могу найти правильную ссылку, импер подскажет. |
Ответ: Искуственный интеллект
burovalex
Не тупи, у тебя есть карта растительности - юзай ее для построения графа для поиска пути Астаром или волновым методом. Точнее ты можешь по этой карте построить регулярную сетку ( массив ) на которой будут отмечаться проходимые и непроходимые участки ( да, можно риалтайм ), а чтобы не тормозило на больших картах - выпрямляй руки, учи матчасть или юзай уже готовые реализации алгоритмов поиска пути :) |
Ответ: Искуственный интеллект
Как-то скачал сборку примеров на Блитце, там как раз было 2 с А* алгоритмом. Только я не могу найти(
|
Ответ: Искуственный интеллект
Ну даже, чтобы пользоваться Астаром, надо научиться пользоваться подтипами. С чем у меня пока проблемы, вкурить не могу..
Цитата:
|
Ответ: Искуственный интеллект
Оченно рекомендую библу Дипломата:
http://forum.boolean.name/showthread...080#post251080 Юзал для стратегии и шутера - работает отменно и с статикой и динамикой. сотня юнитов шустренько шныряет по уровню с узкими коридорами, не сталкиваясь и не застревая. |
Ответ: Искуственный интеллект
Можно использовать волновой алгоритм. Это наверно самый простой поиск пути в плане реализации.
http://pmg.org.ru/ai/path.htm |
Ответ: Искуственный интеллект
Вот для свой игрушки тоже ищу нахождение пути только вот мне нужно сделать нахождение по вей поинтам
тоесть расставил точки по карте а в функции обновления нпс просто повернуть и толкать до ближайшей точки в варианте tormoz,а таковых точек не заметил но увидел что надо показывать где стены а на большой карте с кучей домов и разных интерьеров таковой возможности нет еслть ли такие библиотеки работающие по вышеописанному принципу |
Ответ: Искуственный интеллект
Цитата:
Твоя задача передать в длл сетку проходимости. Разбиваешь уровень на клетки со стороной в одного юнита. Заполняешь массив по проходимости. Передаешь в пп. Все. Заполнять сетку можно заранее, например нарисовать битмап проходимости, где пиксель -клетка сетки, или получить в коде, пикая уровень по сетке, дифференцируя по высоте\имени и тп. Дополнить карту можно самими юнитами в динамике. Далее передаешь начальную и конечную точку пути пп возвращает координаты вейпойнтов по которым двигается юнит (в формате сетки). см. примеры в архиве. |
Ответ: Искуственный интеллект
ну сетка это всего лишь частный случай графа, где каждый узел связан с еще 4 (или 9 чтобы ходили по диагонали) узлами, не вижу проблем брать за граф карту вейпоинтов, просто кто будет учить дискретную математику для этого ? все ищут простого решения, геймдевелоперы блин
|
Ответ: Искуственный интеллект
Цитата:
|
Ответ: Искуственный интеллект
Конкретного ответа нет :(
пойду гуглить дальше |
Ответ: Искуственный интеллект
Цитата:
|
Ответ: Искуственный интеллект
Чет я не понял, с трудом разобрался, так что получается.
Если в типе добавить еще один тип - то у них всё равно связи не будет?? 0_о Получается в любом случае придётся проходить по всему списку и делать выборку? |
Ответ: Искуственный интеллект
Цитата:
ЗЫ вот примерно как можно очередь сделать |
Ответ: Искуственный интеллект
щас, я сначала пиками поизвращаюсь )), не попрёт - буду юзать связанные списки. Всё равно спасибо, взял на заметку )
А блитц я не брошу пока не закончу с проектом. Переделывать муторно, т.к. моя версия пока стабильна, не буду пока ее трогать. З.Ы. Как говорит мой батя, "НЕ ТРОГАЙ НАЛАЖЕННО РАБОТАЮЩИЙ МЕХАНИЗМ" - блин, правда правд ) |
Часовой пояс GMT +4, время: 15:51. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot