Python 3.x 退出功能在pygame中不起作用

Python 3.x 退出功能在pygame中不起作用,python-3.x,Python 3.x,当我点击pygame窗口上的“x”时,我希望系统退出。我希望能够随时调用quit\u game函数。因此,如果用户确实退出,它实际上会退出。我已经尝试了sysexit和pygame.quit(),但还没有成功实现这些功能。现在我只是在介绍屏幕中内置了退出功能。我正在使用python 3.4.3。这是代码 import math import random import time import pygame import sys import glob pygame.init() move=0 F

当我点击pygame窗口上的“x”时,我希望系统退出。我希望能够随时调用
quit\u game
函数。因此,如果用户确实退出,它实际上会退出。我已经尝试了
sysexit
pygame.quit()
,但还没有成功实现这些功能。现在我只是在介绍屏幕中内置了退出功能。我正在使用python 3.4.3。这是代码

import math
import random
import time
import pygame
import sys
import glob
pygame.init()
move=0
FPS=60
blue=(0,0,255)
white=(255,255,255)
black=(0,0,0)
green=(0,155,0)
display_width=800
display_height=600
gamedisplay=pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Stacker')
clock=pygame.time.Clock()
speed=2
smallfont=pygame.font.SysFont("Arial",int(display_width/32))
mediumfont=pygame.font.SysFont("Arial",int(display_width/16))
largefont=pygame.font.SysFont("Arial",int(display_width/10))
gamedisplay.fill(green)
block=display_height/12
pygame.display.update()
def quit_game():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
            quit()
def intro_screen():
    welcome_message = mediumfont.render(str("Welcome to Stacker!!!"), True,black)
    gamedisplay.blit(welcome_message,(display_width/4,display_height/40))
    how_to_play_1=smallfont.render(str("Your goal is to get to the major prize bar"),True,black)
    gamedisplay.blit(how_to_play_1,(display_width/3.619909502,display_height/2))
    how_to_play=smallfont.render(str("Press the space bar to stop the shape"),True,black)
    gamedisplay.blit(how_to_play,(display_width/3.48583878,display_height/(12/7)))
    quit_game()
    pygame.display.update()
def middle_block():
    pygame.draw.rect(gamedisplay, blue,(display_width/(32/15),display_height-block,block,block))
    pygame.display.update()
def left_block():
    pygame.draw.rect(gamedisplay, blue,(display_width/(32/13),display_height-block,block,block))
    pygame.display.update()
def right_block():
    pygame.draw.rect(gamedisplay, blue,(display_width/(32/17),display_height-block,block,block))
    pygame.display.update()
def major_screen():
    major_message = mediumfont.render(str("Major Prize Here!"), True,black)
    gamedisplay.blit(major_message,(display_width/(10/3),display_height/40))
    pygame.display.update()
intro_screen()
pygame.time.delay(8000)
gamedisplay.fill(green)
major_screen()
pygame.draw.rect(gamedisplay, blue,(display_width-display_width,display_height/8,display_width,display_height/60))
pygame.draw.rect(gamedisplay, blue,(display_width-display_width,display_height/2.4,display_width,display_height/60))
middle_block()
left_block()
right_block()
pygame.display.update()

您的代码没有主游戏循环。你可能会这样想:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
            quit()
这是你的游戏循环。虽然这几乎是正确的,但它缺少一个关键部分。一个while循环。您告诉Python遍历Pygame跟踪的每个事件。在完成一次事件循环后,它停止。您希望Python不断地循环Pygame事件,直到窗口关闭。为此,创建一个变量来控制循环。例如
running=True
not\u quit=True
。接下来,使用控制变量作为条件围绕for循环包装一个while循环。最后,如果用户关闭窗口,请将控制变量设置为
False

running = True # our variable to control the loop.
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False # break the loop
            pygame.quit()
            sys.exit()
            quit()

这将允许您关闭窗口。但是,我应该注意到,除非在游戏循环中,否则屏幕上的任何文本/形状都不可见。因此,您可能需要重新考虑一下您的代码。

您的代码没有主游戏循环。你可能会这样想:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
            quit()
这是你的游戏循环。虽然这几乎是正确的,但它缺少一个关键部分。一个while循环。您告诉Python遍历Pygame跟踪的每个事件。在完成一次事件循环后,它停止。您希望Python不断地循环Pygame事件,直到窗口关闭。为此,创建一个变量来控制循环。例如
running=True
not\u quit=True
。接下来,使用控制变量作为条件围绕for循环包装一个while循环。最后,如果用户关闭窗口,请将控制变量设置为
False

running = True # our variable to control the loop.
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False # break the loop
            pygame.quit()
            sys.exit()
            quit()

这将允许您关闭窗口。但是,我应该注意到,除非在游戏循环中,否则屏幕上的任何文本/形状都不可见。因此,您可能需要重新考虑一下您的代码。

好的,谢谢,您的答案很好。我取出了sys.exit()命令,因此系统会询问用户是否确实要退出。但总体效果良好。非常感谢。我打算在里面放一个主回路。事实上,它现在有一个。谢谢。好的,谢谢,你的回答很好。我取出了sys.exit()命令,因此系统会询问用户是否确实要退出。但总体效果良好。非常感谢。我打算在里面放一个主回路。事实上,它现在有一个。谢谢