我正在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.
你能帮帮我吗?
答案 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毫秒太短了,所以两个函数都被保持相同的数量。当我附加到列表然后打印,它工作。