我需要一些帮助才能完成作业,今天晚上我问了一个与之相关的问题,但我发现它的陈述和写得非常糟糕。我这次会尝试更具体一点。
我有以下代码,它位于Game类中(继承自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,则向下移动。
它可以正常工作几秒钟,但随后它会让游戏变得越来越慢,直到它完全停止。我也尝试过time.sleep,但它与Tkinter不兼容(你可能已经知道了)。
我认为问题在于使用root.after()
,但我真的不知道任何其他方式无限期地移动对象。
答案 0 :(得分:0)
二十毫秒似乎是一个很短的计划时间,可能会调整一些我不知道的平台依赖。您的代码段中也不清楚可能分配了哪些值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]中,那么球将停止移动,并且不会显示原因。防守计划,特别是在开始时永远不要留下其他的,如果:
if name == "dhcarmona":
pass
elif name == "msw":
pass
else
raise ValueError, "name is not as expected"
ValueError将使您的程序无声地破坏。