I am aware that on the net and also here the question has already been asked, but unfortunately not in the Python environment. Looking on the net, I found this (Link) and from there I started working on it. Since I'm using Pyglet, I wrote the function as a thread. But first, I show you what I thought and wanted to accomplish:
P = Sprite Player Position
M = Mouse Position
C = An imaginary circle, having as its radius the distance between P and M.
0, 1, 2, 3, 4, 5, 6, 7 = Directions that the sprite can have
a = Angle between one direction and another = 45°
S = Section of the circle corresponding to the sprite direction. In simple words, if M is present in S, the direction is equal to 1
start, end = Start Angle and End Angle
So, in the function, I inserted a while loop. Later, I had to calculate when the radius was:
while mpc_thread:
radius = math.hypot(mpx - cpx, mpy - cpy) + 20
mpx, mpy = Mouse position (X, Y)
cpx, cpy = Sprite Player Position (X, Y)
I used math.hypot
thanks to this (Link). I added 20, so that the radius slightly exceeded the position of the mouse.
Then I added a for loop to check the circle section for each direction:
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 = Amount of Sprite directions, in this case 8
To find out the starting and ending angle for each direction, I divided the lap angle by twice the number of directions. Then I subtracted / added the result to the reference angle.
From here on the problems started. Writing in the way I posted the first link, the if function didn't detect anything and if I went in negative (, I got an error. I then searched for a solution and found this (Link) from the answer of user7048690. Modified the function, I got a new problem (math domain error). So I changed math.sqrt
with cmath.sqrt
, and it worked. But a new problem had arisen. That is, always following that answer, the if function drastically reduced FPS to 0/1. Now I don't know where to head. Can you help me with this problem? How should I build the function correctly and work properly? I hope I understood what I meant by my question.