Python 尝试使用pygame事件函数,允许玩家在按下x时退出游戏
如果你看下面的代码,我的绘图函数中有If条件,根据目标精灵组的长度显示赢家屏幕和输家屏幕(这是一个目标射击游戏)。我添加了一个名为game_over的布尔变量。当显示“输家”或“赢家”屏幕时,这将更改为True。然后,在游戏循环中,我添加了一个事件,如果按下x,杀死while循环。测试后,pressign x似乎什么也不做。然而,我不明白为什么会这样,因为我重复了其他stackoverflow应答器使用的key event函数Python 尝试使用pygame事件函数,允许玩家在按下x时退出游戏,python,pygame,Python,Pygame,如果你看下面的代码,我的绘图函数中有If条件,根据目标精灵组的长度显示赢家屏幕和输家屏幕(这是一个目标射击游戏)。我添加了一个名为game_over的布尔变量。当显示“输家”或“赢家”屏幕时,这将更改为True。然后,在游戏循环中,我添加了一个事件,如果按下x,杀死while循环。测试后,pressign x似乎什么也不做。然而,我不明白为什么会这样,因为我重复了其他stackoverflow应答器使用的key event函数 def refresh_window(): if len(tar
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_yerbegame\u over
在函数中使用两次。while循环(whileexec:
)也在函数中吗?如果是,那么你也必须在这个函数中加入global game\u over
。我无法在while循环中声明它是全局的。不幸的是,在刷新窗口函数中对其进行全局化也没有任何效果。我正在使用一个名为repl.it的网站,我不知道你是否知道。也许它对repl.it不起作用,但我不明白为什么wouldnt@j_yerbe您在哪里调用刷新窗口
?你把它称为循环中的吗?是的,在游戏中loop@j_yerbe参见答案的第二部分。@j_yerbegame\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