why is the exit window button work but the exit button in the game does not work?
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.
Solution 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))