Обновление до моего ответа:
Я проверил свой игровой код, чтобы увидеть, как я обрабатываю ключи в каждом кадре, и кажется, что я не получаю информацию о ключах из событий, но использую pygame.key.get_pressed ():
for event in pygame.event.get():
if event.type == pygame.QUIT:
gl.loop_main_loop = False # exit main loop and terminate
keys = pygame.key.get_pressed()
for key, state in enumerate(keys):
if (key in self.key_handlers) and state:
self.key_handlers[key]() # call key handler proc
Это означает, что я обрабатываю каждый соответствующий ключ только один раз за кадр.Мышь можно прочитать так, как я описал ниже.
Просто не забудьте использовать дельта-время в расчете вектора движения, если ваша игра не имеет фиксированной частоты кадров.
Возможно, лучшеИдея состоит в том, чтобы во время каждого процесса сначала обрабатывать все события клавиатуры и создавать свое собственное представление статуса клавиш, то есть структуру, которая сообщает вам, какие клавиши для вас важны (например, WSAD), вверх или вниз.Когда все события будут обработаны в этом кадре, запустите код движения, используя данные о состоянии клавиш.
Не используйте события mousemotion для отслеживания мыши, а читайте положение и кнопки напрямую, используя pygame.mouse.get_pos ()и pygame.mouse.get_pressed ().
Ваш код движения также должен учитывать тот факт, что ваша игра работает с переменной частотой кадров (если только вы не заставили Pygame поддерживать постоянную частоту кадров) и использовать разницу времени вваши вычисления вектора движения.