Мне известно, что в сети, а также здесь вопрос уже задавался, но, к сожалению, не в среде Python.Глядя в сети, я нашел это ( Link ) и оттуда я начал работать над этим.Так как я использую Pyglet, я написал функцию в виде потока.Но сначала я покажу вам, что я думал и чего хотел добиться:
P = позиция игрока в спрайте
M = позиция мыши
C = Воображаемый круг, радиус которого равен расстоянию между P и M.
0, 1, 2, 3, 4, 5, 6, 7 = Направления, которые может спрайтиметь
a = Угол между одним направлением и другим = 45 °
S = Участок окружности, соответствующий направлению спрайта.Проще говоря, если M присутствует в S, направление равно 1
start, end = Start Angle и End Angle
Итак, в функцию я вставил цикл while.Позже мне пришлось вычислить, когда радиус был:
while mpc_thread:
radius = math.hypot(mpx - cpx, mpy - cpy) + 20
mpx, mpy = положение мыши (X, Y)
cpx, cpy = позиция игрока в спрайте (X, Y)
Я использовал math.hypot
благодаря этому ( Ссылка ).Я добавил 20, чтобы радиус немного превышал положение мыши.
Затем я добавил цикл for, чтобы проверить сечение круга для каждого направления:
while mpc_thread:
radius = math.hypot(mpx - cpx, mpy - cpy) + 20
for ang_obj in range(0, fchar):
reference_angle = 360 // fchar * ang_obj
s_angle = reference_angle - (360 / (fchar / 2))
e_angle = reference_angle + (360 / (fchar / 2))
fchar = КоличествоНаправления спрайтов, в данном случае 8
Чтобы выяснить начальный и конечный угол для каждого направления, я разделил угол наклона в два раза на количество направлений.Затем я вычел / добавил результат к исходному углу.
С этого момента начались проблемы.Написав так, как я разместил первую ссылку, функция if ничего не обнаружила, и если я пошел в отрицательном направлении (я получил ошибку. Затем я искал решение и нашел это ( Link ) изОтвет пользователя 7048690. Изменив функцию, я получил новую проблему (ошибка математической области). Поэтому я изменил math.sqrt
на cmath.sqrt
, и это сработало. Но возникла новая проблема. То есть, всегда следуя этому ответу,Функция if резко снизила FPS до 0/1. Теперь я не знаю, куда идти. Можете ли вы помочь мне с этой проблемой? Как мне правильно построить и работать правильно? Надеюсь, я поняла, что я имела в виду под своим вопросом.