我在用type制作一个蛇型游戏。一切都很正常,但下面是我比赛的结束。有一个声音效果,我把延迟,所以窗口没有关闭之前,声音播放完毕。一切都进行得很好,我只是在游戏中添加了文本。由于某种原因,声音播放,游戏暂停,然后游戏在屏幕上迅速闪现。有人能向我解释一下为什么这不正常吗?
我在Mac10.6.8上使用Python2.7。
if w.crashed or w.x<=0 or w.x >= width - 1 or w.y<=0 or w.y >= height -1:
gameover.play()
font = pygame.font.Font(None, 80)
end_game = font.render("Game Over!", True, (255, 0, 0), (0,0,0))
endRect = end_game.get_rect(centerx = width/2, centery = height / 2)
screen.blit(end_game, endRect)
pygame.time.delay(3500)
running = False
发布于 2012-10-17 22:16:45
可能是在pygame.display.flip()
调用之后,您错过了screen.blit()
或display.update(rectangle=endRect)
?
发布于 2012-10-17 22:08:15
我认为你的问题在于running
变量。如果这结束了主while循环*,它将结束程序,这将是您的问题。
*主同时循环:
while running:
#everything that the program does goes here
大多数游戏都有一个,任何影响它的行为都会破坏循环,从而结束程序中的一切。由于您在问题中显示的代码将在该循环中,文本和声音将不会播放。
我知道python在找到delay命令时暂停程序是有意义的,但实际上它并不会暂停程序。它只是暂停了游戏。程序将继续运行,将running
分配给false
,您的循环刚刚结束。字体不会呈现,因为它在循环中,声音不会播放,因为游戏暂停。它从不暂停,因为这将是一个事件,在which循环中调用,该循环现在已关闭。
顺便提一句,Pygame保持“冻结”窗口打开的原因是屏幕上的其他图像和字体的变量保持不变,并且没有被告知关闭。
当然,如果running
变量不是我想的那样的话,这整个答案可能是在浪费我们的时间。
一个有价值的问题:)
发布于 2014-09-19 03:23:28
pygame.display.flip() should be done before `pygame.time.delay(3500)`.
将您的代码更改为
if w.crashed or w.x<=0 or w.x >= width - 1 or w.y<=0 or w.y >= height -1:
gameover.play()
font = pygame.font.Font(None, 80)
end_game = font.render("Game Over!", True, (255, 0, 0), (0,0,0))
endRect = end_game.get_rect(centerx = width/2, centery = height / 2)
screen.blit(end_game, endRect)
pygame.display.update()
pygame.time.delay(3500)
running = False
https://stackoverflow.com/questions/12943922
复制相似问题