Как указано @pjk и другими, вам нужен код для проверки наличия ключей в событии l oop.
Вы сказали, когда исправили, что игра стала неиграбельной, так как вам пришлось несколько раз ударяйте по клавишам, потому что нажатие клавиши ничего не делает . Нажатая клавиша - это событие, и это происходит только тогда, когда клавиша нажата. Вы также получаете событие, когда клавиша отпускается, но при ее удерживании события не генерируются. Однако есть способы обойти это.
Вот несколько способов исправить это:
Мне нравится подход с повторяющимися клавишами, поэтому я сначала расскажу о нем.
Вы можете указать pygame, что вы хотите, чтобы он повторялся, давая вам события нажатия клавиши, если клавиша удерживается. Это похоже на то, что делают многие системы, когда клавиша удерживается. Вы можете получить его, указав pygame, что вы хотите, чтобы он периодически выдавал вам события KEYDOWN, пока клавиша удерживается. Вы используете команду pygame.key.set_repeat(delay, interval)
(документы здесь ). Обычно pygame подделывает для вас события KEYDOWN, когда клавиша удерживается. delay
- это сколько времени необходимо удерживать клавишу перед отправкой первого повторного ключевого события, а interval
- это то, как часто вы хотите, чтобы событие повторялось после начальной задержки.
Вы также можете сделай это по-другому. Вместо того, чтобы реагировать на клавиши при их нажатии, вы отслеживаете состояние клавиш, на которые должна реагировать игра. Когда вы получаете событие KEYDOWN
для одной из этих клавиш, вы устанавливаете переменную состояния, указывающую, что клавиша была нажата. Вы очищаете эту переменную, когда получаете соответствующее событие KEYUP
для этого ключа. Затем за пределами события l oop вы можете реагировать на эту ключевую переменную состояния, чтобы все происходило, пока ключи удерживаются и состояние установлено.
Есть еще один способ, когда вы спрашиваете pygame, что клавиши в настоящее время нажимаются с использованием pygame.key.get_pressed()
. Затем вы анализируете нажатые в данный момент клавиши из возврата. См. Документы здесь .
Если вы используете get_pressed()
, вам все равно нужно событие l oop для обработки событий, иначе pygame не будет обрабатывать события, и ваша игра go не будет отвечать. Вы также можете использовать pygame.event.pump()
, чтобы предотвратить задержку.