Что не так с производительностью pygame и этим кодом?
Вынесите блок с проверкой положения из цикла for event in pygame.event.get()
Замерь время выполнения отдельных участков кода через time.perf_counter(), узнай на чем оно задумывается.
По мне так наиболее вероятные кандидаты - pygame.event.get() и screen.fill().