root.after导致Tkinter应用程序停止工作
def colision(self):
if self.coords(self.bola)[1]<50:
self.boladir=1
if self.coords(self.bola)[1]>870:
self.jugando=0
self.pierde()
# ladrillos=self.find_withtag("brick")
def mueve_bola(self):
if self.jugando:
if self.boladir==0:
self.move(self.bola,0,-10)
elif self.boladir==1:
self.move(self.bola,0,10)
self.colision()
root.after(velocidad_bola,self.mueve_bola)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
1 个回答
1
colision
这个函数通过after
自己调用,所以当游戏开始时,它每20毫秒就会被调用一次。mueve_bola
也每20毫秒调用一次。不过,mueve_bola
也会调用colision
。所以,每20毫秒,colision
就会不断地自己调用自己。20毫秒后,mueve_bola
又会调用colision
,这又会开始一波新的调用,每20毫秒一次。仅仅过了一秒钟,colision
就会被调用50次,每20毫秒一次。再过两秒,它每20毫秒就会被调用100次。你能明白这个问题吗?在很短的时间内,colision
每秒就会被调用上百万次。
其实你只需要在移动物体的时候计算碰撞,所以没有必要让colision
每20毫秒自己调用一次。每次更新显示的时候只需要调用一次就可以了。
我建议你创建一个每40毫秒调用一次的方法。在这个方法里,你可以一次性调整所有东西的坐标。先更新行的坐标,然后是玩家的挡板,再然后是球,最后检查碰撞。