2

I was messing around with pygame and tried to make a line spin around its starting point, the problem is that for some reason I have to use negative degrees to make them work in an expected way, otherwise it seems like there's a "delay".

Using positive degrees

Using positive degrees

Using negative degrees

Here's the code:

import pygame
import time
import math
import sys


CLOCK = pygame.time.Clock()

POSITION_WINDOWS_X = 360
POSITION_WINDOWS_Y = 140
WINDOW_SIZE = (400, 400)
SCREEN = pygame.display.set_mode((WINDOW_SIZE))

HALF_SCREEN = [(i)//2 for i in WINDOW_SIZE]
DISPLAY = pygame.Surface(HALF_SCREEN)



ANGLE = math.radians(135)
LENGTH = 50

while True:

    DISPLAY.fill((146,244,255))

    pygame.draw.line(
        DISPLAY,
        (255, 0, 0),
        [100, 100],
        [
            100 + LENGTH * math.cos(ANGLE), 
            100 + LENGTH * math.sin(ANGLE)
        ],
        5
    )    

    ANGLE -= math.radians(1)
    ANGLE %= -math.pi*2

    print(round(math.degrees(ANGLE)), 'degrees')

    for event in pygame.event.get():
        
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    SCREEN.blit(pygame.transform.scale(DISPLAY, WINDOW_SIZE), (0, 0))

    pygame.display.update()
    CLOCK.tick(60)
qwerty_url
  • 99
  • 5

1 Answers1

0

According to your description, I modified the code, and check the result (Both positive and negative), there is no delay.

enter image description here

enter image description here

For the code. Try this:

  • Negative
import pygame
import time
import math
import sys

CLOCK = pygame.time.Clock()

POSITION_WINDOWS_X = 360
POSITION_WINDOWS_Y = 140
WINDOW_SIZE = (400, 400)
SCREEN = pygame.display.set_mode((WINDOW_SIZE))

HALF_SCREEN = [(i) // 2 for i in WINDOW_SIZE]
DISPLAY = pygame.Surface(HALF_SCREEN)

ANGLE = math.radians(0)
LENGTH = 50

while True:

    DISPLAY.fill((146, 244, 255))

    pygame.draw.line(
        DISPLAY,
        (255, 0, 0),
        [100, 100],
        [
            100 + LENGTH * math.cos(ANGLE),
            100 + LENGTH * math.sin(ANGLE)
        ],
        5
    )

    ANGLE -= math.radians(1)
    ANGLE %= math.pi * 2

    print(round(math.degrees(ANGLE)), 'degrees')

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    SCREEN.blit(pygame.transform.scale(DISPLAY, WINDOW_SIZE), (0, 0))

    pygame.display.update()
    CLOCK.tick(60)
  • Positive
import pygame
import time
import math
import sys

CLOCK = pygame.time.Clock()

POSITION_WINDOWS_X = 360
POSITION_WINDOWS_Y = 140
WINDOW_SIZE = (400, 400)
SCREEN = pygame.display.set_mode((WINDOW_SIZE))

HALF_SCREEN = [(i) // 2 for i in WINDOW_SIZE]
DISPLAY = pygame.Surface(HALF_SCREEN)

ANGLE = math.radians(0)
LENGTH = 50

while True:

    DISPLAY.fill((146, 244, 255))

    pygame.draw.line(
        DISPLAY,
        (255, 0, 0),
        [100, 100],
        [
            100 + LENGTH * math.cos(ANGLE),
            100 + LENGTH * math.sin(ANGLE)
        ],
        5
    )

    ANGLE += math.radians(1)
    ANGLE %= math.pi * 2

    print(round(math.degrees(ANGLE)), 'degrees')

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    SCREEN.blit(pygame.transform.scale(DISPLAY, WINDOW_SIZE), (0, 0))

    pygame.display.update()
    CLOCK.tick(60)

Here is the print:

1 degrees
2 degrees
3 degrees
4 degrees
5 degrees
6 degrees
7 degrees
8 degrees
9 degrees
10 degrees
11 degrees
12 degrees
13 degrees
14 degrees
15 degrees
16 degrees
17 degrees
18 degrees
19 degrees
20 degrees
21 degrees
22 degrees
23 degrees
24 degrees
25 degrees
26 degrees
27 degrees
28 degrees
29 degrees
30 degrees
31 degrees
32 degrees
33 degrees
34 degrees
35 degrees
36 degrees
37 degrees
38 degrees
39 degrees
40 degrees
41 degrees
42 degrees
43 degrees
44 degrees
45 degrees
46 degrees
47 degrees
48 degrees
49 degrees
50 degrees
51 degrees
52 degrees
53 degrees
54 degrees
55 degrees
56 degrees
57 degrees
58 degrees
59 degrees
60 degrees
61 degrees
62 degrees
63 degrees
64 degrees
65 degrees
66 degrees
67 degrees
68 degrees
69 degrees
70 degrees
71 degrees
72 degrees
73 degrees
74 degrees
75 degrees
76 degrees
77 degrees
78 degrees
79 degrees
80 degrees
81 degrees
82 degrees
83 degrees
84 degrees
85 degrees
86 degrees
87 degrees
88 degrees
89 degrees
90 degrees
91 degrees
92 degrees
93 degrees
94 degrees
95 degrees
96 degrees
97 degrees
98 degrees
99 degrees
100 degrees
101 degrees
102 degrees
103 degrees
104 degrees
105 degrees
106 degrees
107 degrees
108 degrees
109 degrees
110 degrees
111 degrees
112 degrees
113 degrees
114 degrees
115 degrees
116 degrees
117 degrees
118 degrees
119 degrees
120 degrees
121 degrees
122 degrees
123 degrees
124 degrees
125 degrees
126 degrees
127 degrees
128 degrees
129 degrees
130 degrees
131 degrees
132 degrees
133 degrees
134 degrees
135 degrees
136 degrees
137 degrees
138 degrees
139 degrees
140 degrees
141 degrees
142 degrees
143 degrees
144 degrees
145 degrees
146 degrees
147 degrees
148 degrees
149 degrees
150 degrees
151 degrees
152 degrees
153 degrees
154 degrees
155 degrees
156 degrees
157 degrees
158 degrees
159 degrees
160 degrees
161 degrees
162 degrees
163 degrees
164 degrees
165 degrees
166 degrees
167 degrees
168 degrees
169 degrees
170 degrees
171 degrees
172 degrees
173 degrees
174 degrees
175 degrees
176 degrees
177 degrees
178 degrees
179 degrees
180 degrees
181 degrees
182 degrees
183 degrees
184 degrees
185 degrees
186 degrees
187 degrees
188 degrees
189 degrees
190 degrees
191 degrees
192 degrees
193 degrees
194 degrees
195 degrees
196 degrees
197 degrees
198 degrees
199 degrees
200 degrees
201 degrees
202 degrees
203 degrees
204 degrees
205 degrees
206 degrees
207 degrees
208 degrees
209 degrees
210 degrees
211 degrees
212 degrees
213 degrees
214 degrees
215 degrees
216 degrees
217 degrees
218 degrees
219 degrees
220 degrees
221 degrees
222 degrees
223 degrees
224 degrees
225 degrees
226 degrees
227 degrees
228 degrees
229 degrees
230 degrees
231 degrees
232 degrees
233 degrees
234 degrees
235 degrees
236 degrees
237 degrees
238 degrees
239 degrees
240 degrees
241 degrees
242 degrees
243 degrees
244 degrees
245 degrees
246 degrees
247 degrees
248 degrees
249 degrees
250 degrees
251 degrees
252 degrees
253 degrees
254 degrees
255 degrees
256 degrees
257 degrees
258 degrees
259 degrees
260 degrees
261 degrees
262 degrees
263 degrees
264 degrees
265 degrees
266 degrees
267 degrees
268 degrees
269 degrees
270 degrees
271 degrees
272 degrees
273 degrees
274 degrees
275 degrees
276 degrees
277 degrees
278 degrees
279 degrees
280 degrees
281 degrees
282 degrees
283 degrees
284 degrees
285 degrees
286 degrees
287 degrees
288 degrees
289 degrees
290 degrees
291 degrees
292 degrees
293 degrees
294 degrees
295 degrees
296 degrees
297 degrees
298 degrees
299 degrees
300 degrees
301 degrees
302 degrees
303 degrees
304 degrees
305 degrees
306 degrees
307 degrees
308 degrees
309 degrees
310 degrees
311 degrees
312 degrees
313 degrees
314 degrees
315 degrees
316 degrees
317 degrees
318 degrees
319 degrees
320 degrees
321 degrees
322 degrees
323 degrees
324 degrees
325 degrees
326 degrees
327 degrees
328 degrees
329 degrees
330 degrees
331 degrees
332 degrees
333 degrees
334 degrees
335 degrees
336 degrees
337 degrees
338 degrees
339 degrees
340 degrees
341 degrees
342 degrees
343 degrees
344 degrees
345 degrees
346 degrees
347 degrees
348 degrees
349 degrees
350 degrees
351 degrees
352 degrees
353 degrees
354 degrees
355 degrees
356 degrees
357 degrees
358 degrees
359 degrees
360 degrees
Frank
  • 772
  • 3
  • 15