why is the exit window button work but the exit button in the game does not work?

跟風遠走 提交于 2021-02-01 05:16:33

问题


i'm making a start menu for my game but when i hit the exit button i made in the start menu, it doesn't exit. Is there anything wrong with my code?

I tried making a function for the exit, put it in the code that exit the game with the window exit button, but nothing worked.

import pygame
import os
pygame.mixer.pre_init()
pygame.mixer.init(44100, 16, 2, 262144)
pygame.init()
from pygame.locals import*


pygame.mixer.music.load(os.path.join(os.getcwd(), 'Sounds', 
'intro.ogg'))
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1)  

FPS = 60
white = (255,255,255)
grey = (128,128,128)
black = (0,0,0)
red = (255,0,0)
orange = (255,128,0)
yellow = (255,255,0)
green = (0,255,0)
Lgreen = (128,255,0)
blue = (0,0,255)
Lblue = (0,255,255)
purple = (255,0,255)
pink = (255,0,127)

pygame.display.set_caption('Snake Universe')
Title = pygame.image.load('Graphics/Title.png')
Play = pygame.image.load('Graphics/Play.png')
Option = pygame.image.load('Graphics/Option.png')
Exit = pygame.image.load('Graphics/Exit.png')
LinePX = pygame.image.load('Graphics/LinePX.png')
LineO = pygame.image.load('Graphics/LineO.png')
clock = pygame.time.Clock()
movie = pygame.movie.Movie('Video/bg.mpg')
screen = pygame.display.set_mode((1280, 720))
bgE = pygame.image.load('Graphics/transparent.png')
movie_screen = pygame.Surface(movie.get_size()).convert()


movie.set_display(movie_screen)
movie.play()


y = 235
y1 = 3000



cnt = 0
playing = True
while playing:
    cnt+=1
    if cnt>=1870:
        cnt=0
        movie.rewind()
        movie.play()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key==pygame.K_RETURN:
                if y == 426:
                    movie.stop()
                    playing = False
                    pygame.quit()
                    quit()      
            if event.key == pygame.K_UP:
                y += 1
                if y == 3236:
                    y = 235
                    y1 = 3000
                if y == 236:
                    y = 425
                    y1 = 3000
                if y == 426:
                    y1 =335
                    y = 3235

            if event.key == pygame.K_DOWN:
                y += 1
                if y == 236:
                    y = 3235
                    y1 = 335
                if y == 3236:
                    y1 = 3000
                    y = 425
                if y == 426:
                    y1 = 3000
                    y = 235

            if event.type == pygame.QUIT:
                movie.stop()
                playing = False
                pygame.quit()
                quit()

   screen.blit(movie_screen,(0, 0))
   screen.blit(Title, (360, 0))
   screen.blit(Play, (460, 250))
   screen.blit(Exit, (460, 450))
   screen.blit(LinePX, (482.5, y))
   screen.blit(LineO, (482.5, y1))
   screen.blit(Option, (460, 350))
   screen.blit(bgE, (-100, 0))
   pygame.display.update()
   clock.tick(FPS)

i expected it to exit the window but instead it doesn't do anything.


回答1:


The main loop runs as long as playing is True.

playing = True
while playing:
    # [...]

When the pygame.QUIT event is handled, playing is set False the main loop condition is fails:

if event.type == pygame.QUIT:
    playing = False
    # [...]

Note, pygame.quit() doesn't terminate the loop, but it uninitialize all pygame modules, which will cause an exception in the following, if it is done in the middle of the application.

If you want to quit the application by the keypad enter key pygame.K_KP_ENTER, the you've to do the same when the pygame.KEYDOWN event is handled:

if event.type == pygame.KEYDOWN:
    if event.key==pygame.K_KP_ENTER:
        playing = False

Or you've to send a pygame.QUIT event by pygame.event.post():

if event.type == pygame.KEYDOWN:
    if event.key==pygame.K_KP_ENTER:
        pygame.event.post(pygame.event.Event(pygame.QUIT))


来源:https://stackoverflow.com/questions/55348418/why-is-the-exit-window-button-work-but-the-exit-button-in-the-game-does-not-work

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!