Tkinter。在相对时间不正常后

时间:2017-10-07 03:46:23

标签: python python-3.x tkinter tkinter-canvas

我正在tkinter中创建一个游戏,并且为了避免我在上一个游戏中遇到的延迟问题,我想分离逻辑和图形循环,因为图形更加cpu密集。为了创建两个循环,我使用了.after循环,因为我在过去成功地使用它们作为控制循环。我给逻辑循环一个10毫秒的延迟时间,图形延迟时间为30毫秒。为了测试循环,我在每个循环中都放了一个print语句,但是每次图形循环触发时,不是看到逻辑循环触发3次,而是以一对一的比率触发。

这是我的代码(抱歉有多个文件:

from tkinter import *
import random
import math

from AppClass import App

root = Tk()
root.title('Test')
root.resizable(0, 0)
app = App(root)

root.mainloop()

Appclass:

from tkinter import *
import random
import math
class App:
    def __init__ (self, _window):
        self.window = _window

#################################
        self.logicClock = 10
        self.graphicClock = 30
#################################


        print(0)
        self.createCanvas()
        self.createBindings()
        self.logicStep()
        self.graphicStep()

    def createCanvas (self):
        self.canvas = Canvas(self.window,
                             bg = "#ff7f00",
                             width = 1280,
                             height = 750
                             )
        self.canvas.pack()
        self.canvas.focus_set()

    def createBindings (self):
        pass

    def logicStep (self):
        self.canvas.after(self.logicClock, self.logicStep)
        print(1)

    def graphicStep (self):
        self.canvas.after(self.graphicClock, self.graphicStep)
        print(2)

结果(运行第一个程序时(注意:它们位于同一目录并具有正确的文件名)):

0
1
2
1
2
1
2
etc.

你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

10毫秒和30毫秒是不够的;如果你增加间隔,它可以工作:

在这里,我使用了1000和3000,所以我可以看到它发生了。

0
1
2
1
1
2
1
1
1
2
1
1
1
2
1

答案 1 :(得分:0)

对于print语句来说30毫秒太短了,所以两个函数都被保持相同的数量。当我附加到列表然后打印,它工作。