我正在改造Tkinter的飞鸟。 (我知道这很糟糕,我在底部解释了原因。)我的问题在于管道,它们滚动的速度以及它们彼此之间的距离。除非我的逻辑出现问题,如果两个管道彼此分开,然后在它们到达某一点时将它们移动,并将它们放在同一点,它们应该保持它们之间的间隙。这可以在代码中更好地解释。
from tkinter import *
import random
root = Tk()
root.geometry('430x640')
root.configure(background='turquoise')
canvas = Canvas(root,width=int(435),height=int(645))
canvas.configure(background='turquoise')
canvas.pack()
x, x2 = 400, 700
y = random.randint(0,300)
y2 = random.randint(0,300)
def drawPipe():
global x,x2,y,y2
canvas.coords(pipeTop,(x,0,(x+50),y))
canvas.coords(pipeBottom,(x,640,(x+50),(y+150)))
canvas.coords(pipeTop2,(x2,0,(x2+50),y2))
canvas.coords(pipeBottom2,(x2,640,(x2+50),(y2+150)))
x -= 3
x2 -= 3
if x < -46:
x = 435
y = random.randint(5,540)
if x2 <-46:
x2 = 435
y2 = random.randint(5,540)
root.after(1,drawPipe)
pipeTop = canvas.create_rectangle(x,0,(x+50),y,fill='green')
pipeBottom = canvas.create_rectangle(x,640,x+50,y+150,fill='green')
pipeTop2 = canvas.create_rectangle(x2,0,(x2+50),y,fill='green')
pipeBottom2 = canvas.create_rectangle(x2,640,(x2+50),(y2+150),fill='green')
drawPipe()
root.mainloop()
这不是我的完整代码,但它涉及绘制和更新管道。运行时,此代码将向您显示管道滚动如何加速和减速。我不明白这是怎么可能的。除起始位置外,管道的所有值都相同。这是由于Tkinter使用after
方法的低效方式吗?我尝试使用线程,但在使用root.bind
时会产生问题(请参阅我的previous问题)。或者是由于逻辑错误?提前感谢任何可以帮助我的人。
答案 0 :(得分:0)
使用after(1,..)
,您获得1000FPS
(每秒帧数),但您不需要它 - 使用after(20, ...)
获取50 FPS
。
除了使用after(1,..)
之外,您的程序没有时间做其他事情 - 它没有时间执行所有after()
因此您可以获得不同的速度。
after(1,..)
我甚至无法移动窗口
而且我的CPU变得更热,所以风扇开始工作得越来越快。