Я делаю игру со змеиным движением. Я считаю, что лучший способ добиться хорошего результата - создать отдельный поток для обработки ввода с клавиатуры пользователя. Вот моя функция, которую я хочу запустить в отдельном потоке:
def _handle_keyboard_input(self):
while self.is_running:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self._set_velocity(-1, 0)
elif event.key == pygame.K_RIGHT:
self._set_velocity(1, 0)
elif event.key == pygame.K_UP:
self._set_velocity(0, -1)
elif event.key == pygame.K_DOWN:
self._set_velocity(0, 1)
def _set_velocity(self, x, y):
self._velocity_x = x
self._velocity_y = y
Хотя я волнуюсь, будет ли постоянный цикл через это время загружать ЦП слишком сильно. Я думал о добавлении pygame.time.delay()
задержек, но потом я не уверен, удастся ли мне «ударить» подходящий момент для события KEYDOWN (график c, который я нашел на этом сайте ниже).
Я не хочу использовать pygame.key.get_pressed()
, потому что я не хочу расставлять приоритеты для каких-либо клавиш (например, если клавиши со стрелками влево и вверх были нажаты одновременно, я придется выбрать один из них).
Каков наилучший подход к этому?