Почему l oop не останавливается нажатием клавиши? - PullRequest
2 голосов
/ 09 июля 2020

Я пытаюсь создать бесконечный l oop круг, перемещающийся по экрану, используя оператор while, и я хотел бы знать, как использовать нажатие клавиши для активации команды break, чтобы остановить l oop ?

while run_me:
    clock.tick(fps_limit) 

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run_me = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                T = 1
                while T == 1:
                    posx = posx - 1
                    screen.fill(black)
                    pygame.draw.circle(screen, colorcircle, (posx, posy), 50)
                    pygame.display.flip()
                    if posx == 0:
                        posx = posx + 600

Ответы [ 2 ]

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

Проблема в бесконечном внутреннем l oop. Как только этот l oop введен, он никогда не прекращается. Никогда не реализуйте игру l oop в основном приложении l oop. Используйте основное приложение l oop и используйте pygame.key.get_pressed(), чтобы реализовать непрерывное движение.

while run_me:
    clock.tick(fps_limit) 

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run_me = False
    
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:    
        posx = posx - 1
        if posx == 0:
            posx = posx + 600
    
    screen.fill(black)
    pygame.draw.circle(screen, colorcircle, (posx, posy), 50)
    pygame.display.flip()
0 голосов
/ 09 июля 2020

Вероятно, вы не захотите иметь две петли. В настоящее время вы не выполняете никакой обработки событий внутри вашего внутреннего l oop, что означает, что нет хорошего способа остановить это. Но вместо того, чтобы добавлять туда дополнительные элементы pygame.event, почему бы просто не использовать повторно код из основного l oop?

Вот код, который, вероятно, довольно близок к рабочему (он неполный, поэтому я не протестировал). Большинство изменений просто удаляют отступы от того, что у вас уже было.

while run_me:
    clock.tick(fps_limit) 

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run_me = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                T = 1
            elif event.key == pygame.K_RIGHT:   # add some code to stop drawing
                T = 0

    if T == 1:               # change this to an `if` rather than a `while`, and unindent
        posx = posx - 1
        screen.fill(black)
        pygame.draw.circle(screen, colorcircle, (posx, posy), 50)
        pygame.display.flip()
        if posx == 0:
            posx = posx + 600

Вероятно, вам следует использовать более подходящее имя переменной, чем T.

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