Tkinter滚动画布小工具速度问题

时间:2014-07-04 15:34:51

标签: python canvas tkinter

我正在改造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问题)。或者是由于逻辑错误?提前感谢任何可以帮助我的人。

<小时/> 旁注:我意识到我不应该在tkinter中制作游戏,尤其是需要同时发生多项事情的游戏。但是,我在学校这样做,我想要使用的模块(Pygame或Pyglet)不能仅仅为我制作一个没有真正目的的游戏。如果我可以使用除了tkinter之外的东西,我可能会。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

使用after(1,..),您获得1000FPS(每秒帧数),但您不需要它 - 使用after(20, ...)获取50 FPS

除了使用after(1,..)之外,您的程序没有时间做其他事情 - 它没有时间执行所有after()因此您可以获得不同的速度。

after(1,..)我甚至无法移动窗口 而且我的CPU变得更热,所以风扇开始工作得越来越快。

相关问题