Вы вызываете только key_state = pygame.key.get_pressed()
внутри своего цикла, где вы повторяете каждое событие. Просто возьмите это оттуда, и оно должно работать.
Проблема в том, что он будет проверять наличие нажатых кнопок только в случае появления нового события. Если не было нового события, он не будет проверять нажатые кнопки и код не будет выполнен
def key_control(hero_temp):
key_state = pygame.key.get_pressed()
if key_state[pygame.K_RIGHT]:
print('move to right')
hero_temp.x += 10
if key_state[pygame.K_LEFT]:
print('move to left')
hero_temp.x -= 10
if key_state[pygame.K_UP]:
print('move to top')
hero_temp.y -= 10
if key_state[pygame.K_DOWN]:
print('move to right')
hero_temp.y += 10
if key_state[pygame.K_SPACE]:
print('space/shoot')
hero_temp.fire()
for event in pygame.event.get():
# Only gets run if there are new events
if event.type == pygame.QUIT:
print('Game Exit')
exit()