这是我的第一篇文章。我在两个月前考虑职业交换时开始编码,正在研究俄罗斯方块克隆。我已经实现了大部分核心功能,但无法通过后循环让游戏不断刷新。
我正在使用Tkinter来制作我的Gui并且正在尝试面向事件的编程。
我的理解是来自after(Time, Event)
的{{1}}应安排在Tkinter
指定的延迟后Event
回调函数发生的任何事情。我认为代码应该在此之后继续执行后续项目。
我的帧刷新功能(Time
)完成了俄罗斯方块工作的大部分必要事件,然后使用after调用自身。初始化游戏实例时我会调用一次。
game.updateBoard()
函数无限期地通过mainloop()
调用自身,而不是继续game.updateboard()
。
我怀疑它的表现并不像我认为after
的工作方式,即在指定的延迟发生之前继续执行脚本。我认为它正在等待回调终止继续。
我试图在此找到一个资源,但不能。
如果您有解决此问题,附带代码或一般编码的建议,我很高兴听到它们!这是一个学习过程,我很乐意尝试你提出的任何建议。
以下是代码的相关部分:
after
答案 0 :(得分:17)
您想要self.frame.after(500, self.updateBoard)
。
这里的区别很微妙,(self.updateBoard
而不是self.updateBoard()
)。在您的版本中,您将函数的结果传递给after
方法,而不是传递函数。这会导致您描述的无限递归。