Нажмите и удерживайте для pygame

Я использую pygame и pyautogui для перемещения мыши по экрану в python 2.7. Мой код выглядит так:

    import pyautogui
    import pygame
    pygame.init()
    pygame.display.set_mode()
    loop = True
    while loop:

         for event in pygame.event.get():
                if event.type == pygame.quit:
                    pygame.quit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_a:
                        pyautogui.moveRel(-50,0)

Мой код перемещает мышь влево, когда я нажимаю «a», но мне приходится нажимать кнопку несколько раз, когда я хочу перемещать мышь по экрану. Есть ли способ нажать и удерживать a и перемещать мышь по экрану? Я просмотрел другие руководства по этой теме, но они кажутся очень специфичными для проекта.


person Asori12    schedule 08.08.2017    source источник


Ответы (1)


По сути, вы хотите установить переменную, указывающую, нажата ли клавиша при нажатии клавиши, и обновить ее, как только клавиша будет поднята.

Здесь я обновил ваш код, чтобы сделать это, чтобы его было легче понять.

import pyautogui
import pygame
loop = True

a_key_down = False                                    # Added variable
while loop:

     for event in pygame.event.get():
            if event.type == pygame.quit:
                pygame.quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    a_key_down = True                 # Replaced keydown code with this
            if event.type == pygame.KEYUP:            # Added keyup
                if event.key == pygame.K_a:
                    a_key_down = False                
    if a_key_down:                                    # Added to check if key is down
         pyautogui.moveRel(-50,0)
person Martin    schedule 08.08.2017
comment
Я полагаю, вы хотите поместить этот if a_key_down в цикл while, а не в for event in pygame.event.get(). В противном случае это приведет к перемещению в зависимости от количества событий. Конечно, это изменение все равно сделает движение зависимым от скорости игрового цикла, и я уверен, что с этим OP придется иметь дело ... - person Mark Hildreth; 08.08.2017