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

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

1 голос
/ 06 апреля 2019

Программа не работает, когда я нажимаю левую клавишу курсора. Но когда я делаю обычный способ 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 Ответ

1 голос
/ 07 апреля 2019

При нажатии клавиши происходит одиночное событие pygame.KEYDOWN.Когда ключ отпущен, возникает единственный KEYUP.Если вы хотите определить, нажата или отпущена pygame.K_LEFT, необходимо проверить атрибут .key pygame.event.Установите состояние (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().

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