gpt4 book ai didi

python - 使用 sleep() 时 Python 运动中的代码不流畅

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:25 25 4
gpt4 key购买 nike

编写了一个函数,该函数将循环左右移动一个矩形的边缘。我希望它以恒定的速度移动。实际发生的是运动很粗糙。运动将改变其速度。我怎样才能让它以恒定的速度移动?

def btn_start_press():
global x1, x2, y1, y2, canvas_width

size = int(entry_size.get())
x2 = x1 + size
y2 = y1 + size
label_size["text"] = size * 2

forward = True
while True:
if forward:
x1 += 1
x2 += 1
else:
x1 -= 1
x2 -= 1
if x2 + size >= canvas_width:
forward = False
elif x1 <= 0 :
forward = True

time.sleep(0.005)
canvas.coords(rect,x1,y1,x2,y2)
canvas.update()

最佳答案

在您的代码之外,您的计算机中发生了很多事情,这意味着您的代码并不是唯一争夺资源的东西。在您的情况下,这最终会导致循环每次迭代花费的时间不同,因此最终会出现锯齿状运动。在您的情况下, sleep 时间也很短,以至于会占用大量分配给您的应用程序的时间。

在这种情况下可能会正常工作的天真的修复是使用两次重绘之间耗时,并使用它来计算将按钮移动多远。

如果您使用 time.sleep(0.015),您的应用程序将尝试以大约 75 fps 的速度运行其代码(减去代码中花费的时间)。您可以使用 time.time() 获取当前时间(以毫秒为单位)。请注意,此时间信息可能相当粗糙,并且存在其他问题(例如,如果调整计算机时钟,则会发生变化)。那里are better timers available ,但对于这个用例,它应该足够好。

pixels_per_second = 100
previous_time = time.time()

while True:
new_time = time.time()
elapsed = new_time - previous_time
pixels = pixels_per_second * elapsed

if forward:
x1 += pixels
x2 += pixels
else:
x1 -= pixels
x2 -= pixels

if x2 + size >= canvas_width:
forward = False
elif x1 <= 0 :
forward = True

previous_time = new_time

canvas.coords(rect,x1,y1,x2,y2)
canvas.update()

time.sleep(0.015)

关于python - 使用 sleep() 时 Python 运动中的代码不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com