Как использовать event.type?

#python #pygame

#python #pygame

Вопрос:

Программа не работает, когда я нажимаю левую клавишу курсора. Но когда я делаю обычным способом pygame.keys.get_pressed(), это работает. Символ перемещается вправо, но не влево.

 import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("BALANCE")

def updatedis(x):

    win.fill((0, 0, 0))
    pygame.draw.rect(win, (255, 0, 0), (x, 480, 40, 20))
    pygame.draw.line(win, (0, 255, 0), (x 20, 480), (x 20, 380), 2)
    pygame.display.update()

def main():

    x = 230
    k = True

    while k:

        keys = pygame.key.get_pressed()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                k = False
            if event.type == pygame.K_LEFT:
                x = x-5

        pygame.time.delay(10)

        if keys[pygame.K_RIGHT] and x <= 460:
            x = x   5

        updatedis(x)

    pygame.quit()

main()
  

Комментарии:

1. событие сообщает только о том, что ключ изменил состояние с not pressed на pressed . и когда оно изменилось с pressed на not pressed . Система не создает событие, когда вы продолжаете нажимать кнопку.

2. pygame.K_LEFT не является event.type pygame.KEYDOWN есть event.type . И pygame.KEYUP это event.type

3. используйте кнопку {} для правильного форматирования рассматриваемого кода.

Ответ №1:

При нажатии клавиши происходит одно pygame.KEYDOWN событие. Когда ключ является release, тогда возникает один KEYUP . Если вы хотите определить, pygame.K_LEFT нажата или отпущена ли .key кнопка, вы должны проверить pygame.event атрибут the, который имеет значение для этого, и проверить, является ли он. Установите состояние ( left ) при pygame.K_LEFT нажатии и сбросьте состояние при его отпускании.
Измените x координату в главном цикле, когда left указано:

 left = False
while k:

    keys = pygame.key.get_pressed()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            k = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                left = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                left = False

    pygame.time.delay(10)

    if keys[pygame.K_RIGHT] and x <= 460:
        x = x   5
    if left:
        x = x-5
  

Обратите внимание, это очень похоже на то, что pygame делает для вас, указывая значения, которые возвращаются pygame.key.get_pressed() .

Комментарии:

1. Спасибо!! Теперь я понял 🙂