Ради интереса я попытался реализовать классическую игру в змейку на Python/Tkinter. Он чувствует себя очень медленным, и я не совсем уверен, смогу ли я это исправить или нет. Попытаюсь кратко изложить программу:
Сначала я создаю холст и добавляю обработчик событий для каждой клавиши со стрелкой:
root = self.root = Tk()
canvas = Canvas(root, width = width, height = height)
canvas.pack()
canvas.bind("<Left>", on_left) # on_left is a very short function
У меня также есть функция для временного шага. Он рисует графику и запланирует повторный вызов. Функция не очень эффективна, так как каждый раз перерисовывает 100 прямоугольников:
def timestep(self):
# draw the graphics here (about 100 filled rectangles)
timer = threading.Timer(interval, timestep)
timer.start()
Теперь у меня две проблемы:
- Даже когда я выбираю
interval
вtimestep()
около 0,05 (что эквивалентно 20 кадрам в секунду), я не получаю больше, чем 3-5 кадров в секунду. - Кажется, что ввод управления с клавиатуры задерживается примерно на 0,5 секунды.
Меня интересуют три вещи:
Можно ли вообще написать гладкую, не запаздывающую (20 кадров в секунду) змейку с холстом Tkinter, когда вы хотите рисовать 100 прямоугольников на каждом временном шаге?
Является ли
threading.Timer
правильным выбором для вызова функции временного шага?Почему мой ввод с клавиатуры кажется задержанным?
self.parent.after(interval, timestep)
наверное проще и легче. Можете ли вы показать достаточно кода, чтобы проблема была воспроизведена? - person TigerhawkT3   schedule 16.04.2016after
- person Bryan Oakley   schedule 17.04.2016