有一个工作代码,它的功能是用户使用按键控制球:
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root)
canvas.pack()
circle = canvas.create_oval((150, 100, 170, 120), fill='yellow')
vx = 0
vy = 0
def on_key_press(event):
global vx, vy
if event.keysym == 'Left':
vx = -10
elif event.keysym == 'Right':
vx = 10
elif event.keysym == 'Up':
vy = -10
elif event.keysym == 'Down':
vy = 10
def on_key_release(event):
global vx, vy
if event.keysym in ('Left', 'Right'):
vx = 0
elif event.keysym in ('Up', 'Down'):
vy = 0
root.bind('<KeyPress>', on_key_press)
root.bind('<KeyRelease>', on_key_release)
def game_loop():
canvas.move(circle, vx, vy)
root.after(50, game_loop)#Эту строку я изменяю
game_loop()
root.mainloop()
但是当我将 root.after(50, game_loop) (在代码中指定)更改为两行时,这在逻辑上应该可以工作:
time.sleep(0.5)
game_loop()
该程序启动一个窗口,绘制一个球并停止(您无法控制它),但它没有给出错误。有什么问题?
通过使用
sleep()
,你打破了循环。after()
与 不同sleep()
,在后台进程中运行。