Эффективный способ перемещения объекта в Tkinter Canvas - PullRequest
1 голос
/ 13 июня 2011

Мне нужна помощь для выполнения задания, я задал вопрос, связанный с этим вечером, но я понимаю, что он был очень плохо изложен и написан. Я постараюсь быть более конкретным на этот раз.

У меня есть следующий фрагмент кода, он находится внутри класса 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(), но я действительно не знаю другого способа перемещения объекта на неопределенное время.

1 Ответ

0 голосов
/ 13 июня 2011

Двадцать миллисекунд кажутся коротким графиком, который может изменить зависимость от платформы, о которой я не знаю.Из вашего фрагмента кода также не ясно, какие значения 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 не даст вашей программе молча взломаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...