【发布时间】:2015-09-12 23:20:40
【问题描述】:
首先,很抱歉我的菜鸟问题。
所以我正在尝试学习 pygame,为此我创建了一个“游戏”,只要有人点击顶部角落的关闭按钮(“x”按钮)就应该退出窗口,而是整个游戏重新开始。 我使用“Game = False”来指出游戏需要关闭,因为游戏所做的一切都位于仅以“Game = True”开头的循环中,并且在脚本的末尾(循环结束后)有一个“pygame.quit()”和一个“sys.exit()”。这工作正常,但最近我添加了以下几行:
if x < 0 or x > display_width - spacecore_width:
game_over()
那些应该调用“game_over”函数,通过调用另一个覆盖整个游戏的函数来重置游戏(循环位于该函数内部)。但是,当有人单击“x”按钮退出游戏时,这不应该发生,我不知道为什么当这样的事情完成时也会发生这种情况(除了按预期工作,如果“x display_width - spacecore_width"。
我已经知道如何避免它(我只需要用那些退出命令替换“Game = False”)但我想知道为什么首先会出现问题。
这是完整的代码:
import pygame, sys, time
pygame.init()
display_width = 800
display_height = 600
DISPLAY = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Não enconste nas bordas da tela")
WHITE = (255,255,255)
RED = (255,0,0)
SPACECORE = pygame.image.load("spacecore.png")
spacecore_width = 100
clock = pygame.time.Clock()
def text_and_rect(text,font):
text_surface = font.render(text,True,RED)
return text_surface, text_surface.get_rect()
def message_display(text):
font = pygame.font.Font("freesansbold.ttf",50)
text_surf, text_rect = text_and_rect(text,font)
text_rect.center = ((display_width/2),(display_height/2))
DISPLAY.blit(text_surf,text_rect)
pygame.display.update()
time.sleep(2)
def game_over():
message_display("Você morreu de morte morrida")
game_loop()
def player(x,y):
DISPLAY.blit(SPACECORE,(x,y))
def game_loop():
Game = True
x = display_width * 0.5
y = display_height * 0.8
mod_x = mod_y = 0
while Game == True:
pygame.display.update()
DISPLAY.fill(WHITE)
for event in pygame.event.get():
if event.type == pygame.QUIT:
Game = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
mod_x = -5
if event.key == pygame.K_RIGHT:
mod_x = 5
if event.key == pygame.K_UP:
mod_y = -5
if event.key == pygame.K_DOWN:
mod_y = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
mod_x = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
mod_y = 0
x += mod_x
y += mod_y
clock.tick(60)
player(x,y)
if x < 0 or x > display_width - spacecore_width:
game_over()
game_loop()
pygame.quit()
sys.exit()
【问题讨论】:
-
breaking 在退出事件后停止处理事件怎么样? -
@ Reut Sharabani 我不知道为什么谈话会转移到另一个评论部分,但无论如何......我知道我可以使用 break 作为解决方法来退出游戏,以及解决方案您在答案中发布的内容非常有用。我不明白的是为什么游戏调用函数 "gameover()" ,退出游戏时不应调用该函数(因为它实际上重新启动了所述游戏),如果调用它的 "if" 语句的条件从未遇到过(或者不应该遇到,至少对于退出游戏而言)。另外,我无法调试我的脚本(是的,我就是那个菜鸟)......
标签: python function loops python-3.x pygame