Хороший вопрос. Когда вы нажимаете клавишу, она становится «Вниз» на несколько циклов. Вам нужен обработчик событий. Проведите эксперимент. Замените: if keys [pg.K_DOWN]: self.rect.y + = 2 на: if keys [pg.K_DOWN]: print ("Down")
Вы будете видеть, что каждый раз, когда вы нажимаете Key, происходит несколько отпечатков, но прекращается, когда вы перестаете нажимать.
Вы можете либо использовать переменную, чтобы отслеживать состояние вашего ключа (когда оно изменяется), либо использовать обработчик событий.
for event in pygame.event.get():
# handle key press
if event.type == pygame.KEYDOWN: