【问题标题】:root.after causes Tkinter application to stop working [closed]root.after 导致 Tkinter 应用程序停止工作 [关闭]
【发布时间】:2011-06-12 18:37:26
【问题描述】:
    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)

【问题讨论】:

    标签: python canvas tkinter


    【解决方案1】:

    colision 通过after 调用自己,所以当游戏开始时,它将每 20 毫秒调用一次。 mueve_bola also calls itself every 20ms. However,mueve_bola_also_ callscolision. So, every 20ms,colisioncreates another unending stream of calls to itself every 20ms. 20 ms latermueve_bolacallscolisionagain, which again starts another stream of calls every 20ms. After just one secondcolisionis being called 50 times every 20ms. After two seconds it will be 100 calls tocolisionevery 20 ms. Do you see the problem? In very little time you will have millions of calls tocolision`每秒。

    您只需要在移动物体时计算碰撞,因此无需让colision 每 20 毫秒调用一次。每次更新显示时只需要调用一次。

    我建议您创建一个每 40 毫秒左右调用一次的方法。在其中,您可以一次调整所有内容的坐标。更新行的坐标,然后是玩家的桨,然后是球,然后检查碰撞。

    【讨论】:

    • 太棒了!!!是的,现在我看到了我犯的巨大错误^^你是绝对正确的!我会按照你说的去做:移动所有东西的单一方法将更容易实现......谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多