Удерживайте нажатой клавишу Pygame - PullRequest
0 голосов
/ 09 июля 2020
while True:

    pencere = pygame.display.set_mode((800,600))
    pygame.display.set_caption("Oyun")

    for olay in pygame.event.get():
        if olay.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    keys = pygame.key.get_pressed()

    if keys[pygame.K_UP]:
        y -= 3
    if keys[pygame.K_DOWN]:
        y += 3
    if keys[pygame.K_LEFT]:
        x -= 3
    if keys[pygame.K_RIGHT]:
        x += 3

    pencere.fill(beyaz)
    pygame.draw.rect(pencere, mavi, (x, y, 40, 60))
    pygame.display.update()

Когда я нажимаю кнопки навигации, прямоугольник становится 3 пикселя. Но как мне сделать так, когда я зажму клавиши?

Ответы [ 3 ]

2 голосов
/ 10 июля 2020

Вы повторно инициализируете окно pygame каждый раз вокруг l oop с помощью set_mode. По-видимому, это тоже сбрасывает ввод с клавиатуры. (На самом деле я удивлен, что это не заставляет все окно мерцать и не вызывает других очевидных эффектов.) Вы должны вызывать set_mode один раз , и вы должны сделать это перед вашим основным л oop.

1 голос
/ 10 июля 2020

Я часто использую такую ​​возможность в своих проектах pygame.

Основа этого - установить для переменной значение True, если клавиша нажата, и false, если она отпущена. Когда вы вызываете такую ​​функцию, как move(), вы проверяете, являются ли переменные движения True или False.

Если вы одновременно нажмете стрелки вправо и влево, движения не будет.

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

Код:

running = True
directions = {"right": False, "left": False}
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                directions['right'] = True
            elif event.key == pygame.K_LEFT:
                directions['left'] = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                directions['right'] = False
            elif event.key == pygame.K_LEFT:
                directions['left'] = False
    if directions['right']:
        x += 3
    if directions['left']:
        x -= 3
0 голосов
/ 10 июля 2020

Вы можете сделать

import time

key_1 = pygame.key.get_pressed()
time.sleep(0.5)
key_2 = pygame.key.get_pressed()

if key_1 == key_2:
    if key_1[pygame.K_UP]:
        y -= 3
    if key_1[pygame.K_DOWN]:
        y += 3
    if key_1[pygame.K_LEFT]:
        x -= 3
    if key_1[pygame.K_RIGHT]:
        x += 3

Таким образом, x и y обновляются, только если одна из клавиш навигации удерживается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...