【问题标题】:why is the exit window button work but the exit button in the game does not work?为什么退出窗口按钮可以使用,但游戏中的退出按钮不起作用?
【发布时间】:2019-03-26 00:57:22
【问题描述】:

我正在为我的游戏制作一个开始菜单,但是当我点击我在开始菜单中制作的退出按钮时,它并没有退出。我的代码有什么问题吗?

我尝试为退出制作一个函数,将其放入使用窗口退出按钮退出游戏的代码中,但没有任何效果。

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)

我希望它退出窗口,但它什么也没做。

【问题讨论】:

  • 从一小段代码中并不清楚发生了什么。主循环中如何处理按钮单击事件?也许当退出代码被激活时,post 一个pygame.QUIT 事件回到主循环,例如:pygame.event.post( pygame.QUIT, {} )
  • 我更新了我的代码
  • quitgame() 函数有什么作用?如果它设置playing = False 类似于您处理pygame.QUIT 事件的方式,它应该可以工作。此外,您正在捕捉键盘 Enter 按键,您可能想要pygame.K_RETURN。创建minimal reproducible example 可以更轻松地回答您的问题。

标签: python pygame


【解决方案1】:

只要playingTrue,主循环就会运行。

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

处理pygame.QUIT事件时,设置playingFalse主循环条件失败:

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

注意,pygame.quit() 不会终止循环,但会取消初始化所有 pygame 模块,如果在应用程序的中间完成,这将导致以下异常。

如果您想通过键盘输入键pygame.K_KP_ENTER退出应用程序,您必须在处理pygame.KEYDOWN事件时执行相同操作:

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

或者您必须通过pygame.event.post() 发送pygame.QUIT 事件:

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

【讨论】:

  • 你是对的,但是我删除了一些代码,这些代码会在我按 Enter 时检测 y 的位置并让它做我想做的事情。我发现我的 y 检测代码在回车键上不起作用。例如,当我让它打印一个随机文本时。它不会打印出来。
  • 不,即使 y >= 426 它仍然不起作用。为什么只有向上和向下键与 y 检测器一起使用,但输入不起作用
  • 删除 y += 1 将使箭头键滚动到相反的方向。这是因为当按下箭头键时,它会满足所有值并使它们按顺序前进,然后在人类看来,它会倒退。
  • 成功了,我找到了问题并解决了,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多