问题描述
我想在变量更改为 True
时在屏幕上显示文本。使用此代码显示文本“游戏结束”的时间很短,但不到一秒钟我就消失了。
import pygame
import random
import time
import math
# Initialize pygame
pygame.init()
# Create window (width,height)
screen1 = pygame.display.set_mode(((800,600)))
ScreenHeight = screen1.get_height()
ScreenWidth = screen1.get_width()
#Game Over text
go_font = pygame.font.Font('freesansbold.ttf',128)
go_text = "GAME OVER"
go_textx = 300
go_textY = 300
def show_gameover(go_textx,go_textY):
gameover_text = font.render(go_text,True,(105,105,105))
screen1.blit(gameover_text,(go_textY,go_textY))
# Variable to track gameover
gameover = False
while running:
if gameover:
show_gameover(go_textx,go_textY)
# Insert Background
screen1.blit(background,(0,0))
i = 0
for obs in obstacle_list:
obs.spawn_obstacle()
obs.update_y()
outOfBounds = obs.out_of_bounds(playerX,playerY)
if outOfBounds:
obstacle_list.pop(i)
collision = obs.collision_detection(playerX,playerY)
if collision:
gameover = True
show_gameover(go_textx,go_textY) #Show Gameover-text
i += 1
# Update after each iteration of the while-loop
pygame.display.update()
解决方法
您必须在背景之后绘制文本。如果在绘制背景之前绘制文本,它将从背景中隐藏。在更新显示之前绘制它。所以它被绘制在场景中的所有其他对象上。
while running:
# Insert Background
screen1.blit(background,(0,0))
# [...]
if gameover:
show_gameover(go_textX,go_textY)
# Update after each iteration of the while-loop
pygame.display.update()