簡體   English   中英

我的暫停顯示如何在 Pygame 中正常工作?

[英]How can my Pause display work properly in Pygame?

因此,在我單擊繼續所有內容的按鈕后,我的暫停顯示會不斷返回。

這包含在代碼中:“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()

如果按 P,這是代碼:

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

還有一個全局暫停 = False

任何幫助深表感謝

暫停或不暫停,它只是一個boolean。 你的程序必須決定這意味着什么。

也許這意味着屏幕沒有更新,也許輸入處理不同。

下面是對您的代碼的重新處理,如果設置了暫停標志global_paused ,則屏幕將停止繪制除“*** PAUSED ***”橫幅之外的所有內容。

請注意使用pyagme.Rect來存儲矩形、顏色常量、更簡單的碰撞測試。 Fonts 只需要加載一次,所以這些已經移到主循環之外。

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()
    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM