简体   繁体   中英

How can my Pause display work properly in Pygame?

So my pause display keeps returning after I click on the button which continues everything.

This is included in the code: "def paused(): global pause clock = pygame.time.Clock()"

while pause:

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

    screen.fill(0)
    screen.blit(intropic, (0, 0))

    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    # print(mouse)

    if 270 + 120 > mouse[0] > 270 and 590 + 50 > mouse[1] > 590:
        pygame.draw.rect(screen, (0, 0, 0), (268, 588, 124, 54))
        pygame.draw.rect(screen, (0, 255, 0), (270, 590, 120, 50))
        if click[0] == 1:
            pause = False

    else:
        pygame.draw.rect(screen, (0, 0, 0), (268, 588, 124, 54))
        pygame.draw.rect(screen, (100, 255, 100), (270, 590, 120, 50))

    if 770 + 150 > mouse[0] > 770 and 590 + 50 > mouse[1] > 590:
        pygame.draw.rect(screen, (0, 0, 0), (768, 588, 154, 54))
        pygame.draw.rect(screen, (255, 0, 0), (770, 590, 150, 50))
        if click[0] == 1:
            pygame.quit()
            exit()

    else:
        pygame.draw.rect(screen, (0, 0, 0), (768, 588, 154, 54))
        pygame.draw.rect(screen, (255, 100, 100), (770, 590, 150, 50))

    healthfont = pygame.font.Font(None, 40)
    start = healthfont.render("Weiter", True, (0, 0, 0))
    textRect1 = start.get_rect()
    textRect1.topright = [370, 603]
    screen.blit(start, textRect1)

    healthfont = pygame.font.Font(None, 40)
    end = healthfont.render("Beenden", True, (0, 0, 0))
    textRect1 = end.get_rect()
    textRect1.topright = [900, 603]
    screen.blit(end, textRect1)

    pausefont = pygame.font.Font(None, 80)
    pausetxt = pausefont.render("Pause", True, (0, 0, 0))
    textRect1 = pausetxt.get_rect()
    textRect1.center = [800, 300]
    screen.blit(pausetxt, textRect1)
    pygame.display.flip()

This is the code if you press P:

    if keys[4]:
        pause = True
        paused()

There is also a global pause = False

any help is much appreciated

Being paused or not paused, it's just a boolean. Your program must decide what that means.

Perhaps it means that the screen is not updated, and perhaps input-handling is different.

Below is a re-working of your code where if the paused flag global_paused ever gets set, the screen stops painting everything except a "*** PAUSED ***" banner.

Note the use of pyagme.Rect to store rectangles, constants for colours, an simpler testing of collisions. Fonts only need to be loaded once, so these have been moved outside the main loop.

global_paused = False

BLACK    = (0, 0, 0)
RED      = (0, 255, 0)
GREENISH = (100, 255, 100)

area1 = pygame.Rect( 268, 588, 124, 54 )
area2 = pygame.Rect( 270, 590, 120, 50 )

area3 = pygame.Rect(768, 588, 154, 54)
area4 = pygame.Rect(770, 590, 150, 50)

healthfont = pygame.font.Font(None, 40)
start = healthfont.render("Weiter", True, BLACK )
textRect1 = start.get_rect()
textRect1.topright = [370, 603]

healthfont = pygame.font.Font(None, 40)
end = healthfont.render("Beenden", True, BLACK )
textRect1 = end.get_rect()
textRect1.topright = [900, 603]

pausefont = pygame.font.Font(None, 80)
pausetxt = pausefont.render("Pause", True, BLACK )
textRect1 = pausetxt.get_rect()
textRect1.center = [800, 300]

pause_mode = pausefont.render( "*** PAUSED ***", True, RED, BLACK )


clock = pygame.time.Clock()
exiting = False
while not exiting:

    mouse_click = None
    mouse_pos   = pygame.mouse.get_pos()

    # Handle Events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif ( event.type == pygame.MOUSEBUTTONUP ):
            mouse_click = pygame.mouse.get_pressed()
            if ( area1.collidepoint( event.pos ) ):
                global_paused = not global_paused
            elif ( area3.collidepoint( event.pos ) ):
                exiting = True
        elif ( event.type == pygame.KEYUP ):
            if ( event.key == pygame.K_p ):
                global_paused = not global_paused

    # draw the screen
    screen.fill( BLACK )
    
    if ( not global_paused ):
        screen.blit(intropic, (0, 0))

        pygame.draw.rect(screen, BLACK, area1 )
        if ( area1.collidepoint( mouse_pos ) ):
            pygame.draw.rect(screen, RED, area2 )
        else:
            pygame.draw.rect(screen, GREENISH, area2 )

        pygame.draw.rect(screen, BLACK, area3 )
            pygame.draw.rect(screen, RED, area4 )
        else:
            pygame.draw.rect(screen, GREENISH, area4 )

        screen.blit(start, textRect1)
        screen.blit(end, textRect1)
        screen.blit(pausetxt, textRect1)
    
    else:
        # everything is paused
        screen.blit( pause_mode, ( 0, 0 ) )
    
    pygame.display.flip()
    clock.tick( 60 )
    
pygame.quit()
    

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM