如何在 true 时显示文本

问题描述

我想在变量更改为 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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...