Pygame暂停不恢复

时间:2017-04-15 11:04:15

标签: python pygame

我试图通过按下' p'来试图暂停我的游戏。键,但暂停后,再次按下p时不会取消暂停。以下是我的代码的相关部分,我想知道如何解决此问题和/或是否有更好的替代方法来实现游戏暂停。

pause = False

while True:
    if not pause:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        #game code
        keys = pygame.key.get_pressed()
        #if key up     
        elif keys[pygame.K_p]:
            pause = True #appears to work correctly, screen freezes and
                         #prints "PAUSED" every tick.    
        #more game code
        pygame.display.update()
        fpsClock.tick(FPS)   
    else:
        print("PAUSED")
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()


            elif event.type == pygame.KEYDOWN:
                if event.type == pygame.K_p:
                    pause = False
        pygame.display.update()
        fpsClock.tick(FPS)  

1 个答案:

答案 0 :(得分:1)

下面的代码可以解决问题。

我在if not pause: ... else:部分添加了一个按键处理程序,因为没有它就没有机会退出暂停(如果没有这个,if not pause部分永远不会被运行按键检查是否暂停一次)。

import pygame
pygame.init() # start PyGame (necessary because 'import pygame' doesn't start PyGame)
colorWhite = (255, 255, 255) # RGB color for later use in PyGame commands (valueRed=255, valueGreen=255, valueBlue=255)

colorWhite = (255, 255, 255) # RGB color for later use in PyGame commands (valueRed=255, valueGreen=255, valueBlue=255)
winDisplay = pygame.display.set_mode((1024, 768)) # set PyGame window size to 1024x768 pixel
pygame.display.set_caption("Minimal PyGame Test Script")
winDisplay.fill(colorWhite)

fpsClock = pygame.time.Clock()
FPS = 15
pause   = False
pauseCounter = 0

while True:
    if not pause:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN and event.key == pygame.K_p: 
                pause = not pause 

            #game code

            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        #more game code

        pygame.display.update()
        fpsClock.tick(FPS)   
    else:
        pauseCounter += 1
        print(pauseCounter, "PAUSED")
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN and event.key == pygame.K_p: 
                pause = not pause 
        #more game code
        pygame.display.update()
        fpsClock.tick(FPS)