14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
|
|
1 | |
Зрение NPC с препятствиями21.02.2021, 12:53. Показов 1817. Ответов 7
Здравствуйте. подскажите как сделать зрение для NPC с препятствиями.
Пример на изображении. Сейчас левый NPC видит правого, но правый за стеной, то-есть левый не должен видеть правого. Для зрения я делаю так: есть спрайт viewArea (на изображении он красного цвета), я проверяю колизию viewArea с спрайтом NPC, если значение true, значит NPC видит другого NPC, но как бить если между ними стена ?
0
|
21.02.2021, 12:53 | |
Ответы с готовыми решениями:
7
Игра лабиринт с препятствиями Прохождение под препятствиями Количество маршрутов с препятствиями Остановка перед препятствиями |
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
|
21.02.2021, 14:56 | 2 |
Сообщение было отмечено tdo22 как решение
Решение
tdo22, кастить лучи
1
|
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
|
|
21.02.2021, 16:01 [ТС] | 3 |
zayats80888, нужно пустить луч из начальной точки, и остановить его когда будет прикосновение со стеной или NPC ?
0
|
Просто Икс
685 / 227 / 46
Регистрация: 15.12.2009
Сообщений: 674
|
|
21.02.2021, 16:57 | 4 |
луч и есть твое "зрение". ты либо видишь стенку, либо NPC
кидаешь несколько лучей из одной точки под разным углом - получаешь углы обзора
0
|
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
|
|
21.02.2021, 20:50 [ТС] | 6 |
посмотрел, выглядит интересно.
Но если скажем будет 200npc как это скажется на производительности? у меня будет более 500 npc
0
|
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
|||||||||||
21.02.2021, 21:44 | 7 | ||||||||||
Для начала там просто пример. Для эффективного каста использую специальные структуры данных (типа BSP tree)/
Если все 200 npc находятся на расстоянии видимости от персонажа, то придётся для каждого тестить 4 луча. Если ещё там 100500 препятствий, то придётся каждый луч пускать через все 100500. Но это уже вопрос структурирования данных. Добавлено через 22 минуты Пример под конкретно вашу задачу на базе того кода. Напрвление обзора задаётся курсором мыши. Положение наблюдателя - левой кнопкой мыши. math.hpp
main.cpp
Только ещё один момент, в функции findNearestRaySegments я ищу ближайшее пересечение, перебирая все препятствия. Для вашей задачи можно останавливать поиск, если t < 1.0 .
1
|
1 / 1 / 0
Регистрация: 22.03.2021
Сообщений: 4
|
|
22.03.2021, 13:45 | 8 |
tdo22 Можно стрелять лучами не каждый кадр, а в зависимости от задачи, которую сейчас выполняет NPC (система состояний у вас для NPC есть?). Также можно пускать луч со случайным отклонением в рамках угла обзора -- если не заметит на одном кадре, то может заметить на другом. Чтобы "случайные" числа генерировались быстро можно заранее посчитать небольшую табличку специально под зрение. "Случайность" тут нужна, чтобы NPC не просто сканировали углы обзора с шагом (как роботы, их тоже можно сделать), а более естественно скакали между разными углами в рамках обзора.
0
|
22.03.2021, 13:45 | |
22.03.2021, 13:45 | |
Помогаю со студенческими работами здесь
8
NPC pygame Движение NPC Статичное игровое поле с препятствиями Движение персонажа в консоли с препятствиями Магический квадрат и бег с препятствиями. Разработка игры гонка с препятствиями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |