3

У меня появились некоторые вопросы по работе технологии raycast. Создавая свой проект pygame, я попытался сделать raycast и вот его версия:

def raycast(self):
 x1=hero.rect.x-self.rect.x
 y1=hero.rect.y-self.rect.y
 vh1=math.sqrt(x1**2+y1**2)
 for p in wolls:
 x=p.rect.x-self.rect.x
 y=p.rect.y-self.rect.y
 vh=math.sqrt(x**2+y**2)
 if vh<=vh1:
 self.see_hero=True
 else:
 self.see_hero=False

В начале функции я вычисляю положение игрока и npc, потом получаю расстояние от игрока до npc в пикселях(вроде).

Во второй части for p in wolls: я вычисляю расстояние от стены до npс. После вычисления расстояния от стены до npc я сравниваю результаты вычисленных расстояний:

Запуская свой проект, всё работает не так, как надо. Не могли бы вы помочь мне с этой проблемой?

insolor
51.7k18 золотых знаков61 серебряный знак105 бронзовых знаков
задан 5 сент. 2020 в 13:23
6
  • Что значит "работает не так, как надо"? Commented 5 сент. 2020 в 14:47
  • Даже когда игрок за стеной npc идут за игроком, хотя не должны Commented 5 сент. 2020 в 16:48
  • у вас не правильный алгоритм. вам надо выпустить лучь от игрока до npc, если между ними не будет стены, то npc должен будет пойти за играком Commented 24 сент. 2020 в 19:11
  • Danis, я это понял ещё когда узнал что такое raycast, а вот как его сделать я не знаю Commented 26 сент. 2020 в 18:37
  • посмотрите некоторые советы здесь stackoverflow.com/questions/56316263/… и здесь stackoverflow.com/questions/63838657/… Commented 9 окт. 2020 в 9:58

1 ответ 1

0
+100

Попробуйте создать переменную, включающую диапазон всех координатных точек стены (или только точек на её границе). При прохождении луча от NPC до Вас нужно будет рассчитать, проходит ли луч через координатные точки стены, если нет — то NPC идет за вами, иначе же он останавливается.

MarianD
18.4k4 золотых знака22 серебряных знака35 бронзовых знаков
ответ дан 9 окт. 2020 в 9:32

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.