在Tkinter画布中移动对象的有效方法

2024-04-24 21:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

今天晚上,我问了一个与之相关的问题,但我意识到它的陈述和写作都很糟糕。这次我会说得更具体一点。在

我有以下代码,它在一个游戏类(从Canvas类继承而来)内:

def move_ball(self):
        if self.balldir==0:
                self.move(self.ball,0,-10)
        elif self.balldir==1:
                self.move(self.ball,0,10)
    root.after(20,self.move_ball)

这个方法是用来在画布上移动一个球self.balldir公司. 如果是0,它向上移动;如果是1,它向下移动。在

它可以在几秒钟内正常工作,但它只会使游戏越来越慢,直到完全停止。我试过了时间。睡觉同样,但它不适合Tkinter(你可能已经知道了)。在

我认为问题在于root.after()的使用,但我真的不知道有其他方法可以无限期地移动对象。在


Tags: 方法代码selfmoveifdefrootcanvas
1条回答
网友
1楼 · 发布于 2024-04-24 21:34:02

20毫秒似乎是一个很短的计划时间,可能会调整一些我不知道的平台依赖性。您的代码片段中也不清楚可以为balldir指定哪些值。如果您希望balldir永远是0或1,您可能会发现这很有帮助:

def move_ball(self):
    assert 0 <= self.balldir <= 1
    self.move(self.ball, 0, 10 * (-1 * self.balldir))
    root.after(...

在您的代码片段中,如果balldir不在[0,1]中,球将停止移动,并且不会给出原因的指示。防御性地进行程序设计,尤其是在开始时,如果:

^{pr2}$

其中ValueError将阻止程序静默中断。在

相关问题 更多 >