python pygame暂停函数
Posted
技术标签:
【中文标题】python pygame暂停函数【英文标题】:python pygame pause function 【发布时间】:2020-03-26 00:39:10 【问题描述】:我是初学者,我的代码有问题。在这里您可以看到我的代码的简短摘录。
这是我创建的一个简单的蛇游戏,但我试图添加一个暂停。我知道了,但是当我开始暂停时,我无法关闭它。
我的代码中可能有一个基本错误,所以我无法前进。我希望你能帮助我。
提前谢谢你!
def checkquit(e):
running = True
pause = False
for ev in e:
if ev.type == pygame.QUIT:
exit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
quit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = False
while pause:
#running = False
pause = True
red = (255,0,0)
screen = pygame.display.set_mode((800,500))
screen.fill((0,0,0))
my_font = pygame.font.SysFont("monospace", 50)
my_font_two = pygame.font.SysFont("monospace", 10)
text1 = myfont.render("Pause!", 100, red)
text2 = myfont.render("Please restart the game", 100, red)
screen.blit(text2, (10, 200))
screen.blit(text1, (230, 100))
pygame.display.update()
for ev in e:
if ev.type == pygame.QUIT:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
【问题讨论】:
使用组合键“KEYDOWN+ESC”取消暂停游戏的期望行为是什么? 我正在尝试关闭我的暂停建议。当我按下键 p 时会出现暂停窗口,但如果我想关闭暂停窗口,它不会关闭 但是根据您的代码,您取消暂停的关键事件使用 Escape,而不是 P:ev.key == pygame.K_ESCAPE: pause = False
由于您的代码只检查 KEYDOWN 事件,看起来游戏会在按住时取消暂停逃生,这可能会导致问题,因为逃生也会退出游戏。
但是如果我将 K_ESCAPE 更改为 pause = True 也没关系。无论如何,当我按 p 键时,游戏就会暂停。
暂停时按住 ESC 键会怎样?
【参考方案1】:
暂停屏幕显示在单独的应用程序循环中。您也必须在该循环中获取事件。请注意,在您的代码中,e
的内容在“暂停”循环中永远不会改变:
def checkquit(e):
global running
running = True
pause = False
for ev in e:
if ev.type == pygame.QUIT:
exit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
quit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
while pause:
# [...]
# get the new events
e = pygame.event.get()
# handle the events in the loop
for ev in e:
if ev.type == pygame.QUIT:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
runnung
似乎是全局命名空间中的变量。你必须使用global
statement 来改变它的状态。
此外,在“暂停”循环中重新创建窗口表面是多余的。
screen = pygame.display.set_mode((800,500))
我建议更改游戏流程。使用 1 个应用程序循环。例如:
myfont=pygame.font.SysFont("monospace",50)
myfonttwo=pygame.font.SysFont("monospace",10)
text1=myfont.render("Pause!",100,red)
text2=myfont.render("Please restart the game",100,red)
def checkquit(e):
global running, pause
for ev in e:
if ev.type == pygame.QUIT:
exit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
if pause:
pause = False
else:
quit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = not pause
running, pause = True, False
while running:
events = pygame.event.get()
checkquit(events)
screen.fill((0,0,0))
if pause:
# draw pause screen
screen.blit(text2,(10,200))
screen.blit(text1,(230,100))
else:
# draw game
# [...]
pygame.display.update()
【讨论】:
【参考方案2】:我将我的代码编辑到这个:
def checkquit(e): 运行=真 暂停 = 假 对于 e 中的 ev: 如果 ev.type == pygame.QUIT: 退出(0) 运行 = 假 暂停 = 假
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
quit(0)
running = False
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
running = False
while pause:
pause = True
red = (255,0,0)
screen = pygame.display.set_mode((800,800))
screen.fill((0,0,0))
myfont=pygame.font.SysFont("monospace",50)
myfonttwo=pygame.font.SysFont("monospace",10)
myfonttwo=pygame.font.SysFont("monospace",10)
text1=myfont.render("Pause!",100,red)
text2=myfont.render("Please resume your game!",100,red)
text3=myfont.render("Game starts in 10 seconds!",100,red)
screen.blit(text2,(50,200))
screen.blit(text1,(300,100))
screen.blit(text3,(0,300))
pygame.display.update()
pygame.time.delay(4500)
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = False
而且效果很好!感谢您的建议!
【讨论】:
你知道我如何发布代码结果的图片吗? 如果有人有兴趣查看我的整个代码,只需通过 github 检查我的用户名 zerokrezan以上是关于python pygame暂停函数的主要内容,如果未能解决你的问题,请参考以下文章