我大概理解了你的意思。
原因在于pygame.KEYDOWN和pygame.KEYUP只表示按下的一瞬间执行。
第一个程序为什么能执行呢?
因为在你按下的时候,moving_right已经变成True了,如果你不放手,那接下来的循环依然是True,只有当你放手才会变为False。所以飞船会移动。
第二个程序中,只有按下的那一瞬间移动了10,下一个循环就不再移动了。
那有没有方法能够让第二个程序运行呢?
有! 用 pygame.key.get_pressed(),其作用是收集当前循环中被按下的键。
把 elif event.type == pygame.KEYDOWN: 及其下属的代码删除,输入下列代码(与for event 对齐):
pressed_keys = pygame.key.get_pressed()
if pressed_keys[pygame.K_RIGHT]:
ship.rect.centerx += 10
elif pressed_keys[pygame.K_LEFT]:
ship.rect.centerx -= 10
此时每个循环都能检测到按下的左右键了。
关于按键的问题比较多,此外还有MOUSEBOTTONDOWN,如果需要我可以找个时间写篇关于event的文章。