Python 尝试使用pygame事件函数,允许玩家在按下x时退出游戏

Python 尝试使用pygame事件函数,允许玩家在按下x时退出游戏,python,pygame,Python,Pygame,如果你看下面的代码,我的绘图函数中有If条件,根据目标精灵组的长度显示赢家屏幕和输家屏幕(这是一个目标射击游戏)。我添加了一个名为game_over的布尔变量。当显示“输家”或“赢家”屏幕时,这将更改为True。然后,在游戏循环中,我添加了一个事件,如果按下x,杀死while循环。测试后,pressign x似乎什么也不做。然而,我不明白为什么会这样,因为我重复了其他stackoverflow应答器使用的key event函数 def refresh_window(): if len(tar

如果你看下面的代码,我的绘图函数中有If条件,根据目标精灵组的长度显示赢家屏幕和输家屏幕(这是一个目标射击游戏)。我添加了一个名为game_over的布尔变量。当显示“输家”或“赢家”屏幕时,这将更改为True。然后,在游戏循环中,我添加了一个事件,如果按下x,杀死while循环。测试后,pressign x似乎什么也不做。然而,我不明白为什么会这样,因为我重复了其他stackoverflow应答器使用的key event函数

def refresh_window():
  if len(target_sprites) > 0:
   window.blit(bgr, (0,0))
  if len(target_sprites) == 0:
    window.blit(winner, (0,0))
    player_sprite.kill()
    game_over = True
  if target_1.got_away == True:
    window.blit(loser, (0,0))
    for item in target_sprites:
      item.kill()
    player_sprite.kill()
    game_over = True

全局命名空间中的变量
game\u over
永远不会变为真。
game\u over
refresh\u窗口范围内的局部变量。如果要在全局命名空间中设置相同的命名变量
game\u over
,则必须使用:

def refresh_window():
全球游戏结束#0:
窗位(bgr,(0,0))
如果len(目标精灵)==0:
窗口。blit(获胜者,(0,0))
玩家_精灵杀死()
游戏结束=正确
如果target_1.got_away==True:
窗口blit(失败者,(0,0))
对于目标精灵中的项目:
项目.kill()
玩家_精灵杀死()
游戏结束=正确

另一个选项是从
刷新窗口返回
游戏结束

def refresh_window():
游戏结束=错误
# [...]
游戏结束了
game\u over=False
执行董事:
# [...]
key\u press=pygame.key.get\u press()
如果game_over==真:
如果按[K\U x]键:
exec=False
游戏结束=刷新窗口()

全局命名空间中的变量
game\u over
永远不会变为真。
game\u over
refresh\u窗口范围内的局部变量。如果要在全局命名空间中设置相同的命名变量
game\u over
,则必须使用:

def refresh_window():
全球游戏结束#0:
窗位(bgr,(0,0))
如果len(目标精灵)==0:
窗口。blit(获胜者,(0,0))
玩家_精灵杀死()
游戏结束=正确
如果target_1.got_away==True:
窗口blit(失败者,(0,0))
对于目标精灵中的项目:
项目.kill()
玩家_精灵杀死()
游戏结束=正确

另一个选项是从
刷新窗口返回
游戏结束

def refresh_window():
游戏结束=错误
# [...]
游戏结束了
game\u over=False
执行董事:
# [...]
key\u press=pygame.key.get\u press()
如果game_over==真:
如果按[K\U x]键:
exec=False
游戏结束=刷新窗口()

@j_yerbe
game\u over
在函数中使用两次。while循环(
whileexec:
)也在函数中吗?如果是,那么你也必须在这个函数中加入
global game\u over
。我无法在while循环中声明它是全局的。不幸的是,在刷新窗口函数中对其进行全局化也没有任何效果。我正在使用一个名为repl.it的网站,我不知道你是否知道。也许它对repl.it不起作用,但我不明白为什么wouldnt@j_yerbe您在哪里调用
刷新窗口
?你把它称为循环中的吗?是的,在游戏中loop@j_yerbe参见答案的第二部分。@j_yerbe
game\u over
在函数中使用了两次。while循环(
whileexec:
)也在函数中吗?如果是,那么你也必须在这个函数中加入
global game\u over
。我无法在while循环中声明它是全局的。不幸的是,在刷新窗口函数中对其进行全局化也没有任何效果。我正在使用一个名为repl.it的网站,我不知道你是否知道。也许它对repl.it不起作用,但我不明白为什么wouldnt@j_yerbe您在哪里调用
刷新窗口
?你把它称为循环中的吗?是的,在游戏中loop@j_yerbe见答案的第二部分。
while exec:
  current_time = pygame.time.get_ticks() 

  for event in pygame.event.get():
    if event.type == pygame.QUIT:
            exec = False

  key_press = pygame.key.get_pressed()
  if game_over == True:
    if key_press[K_x]:
      exec = False