无法在我的pygame项目中绘制字体

-1 投票
1 回答
29 浏览
提问于 2025-04-14 17:00

我在做一个pygame项目,想要显示剩余时间。看起来代码没有语法错误,但屏幕上就是不显示我想要的内容。以下是我的代码:

import pygame
import time
import random
pygame.font.init()

#Windown Setup
WIDTH, HEIGHT = 1280, 700
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pong Wars")
BG = pygame.transform.scale(pygame.image.load("bggame.jpeg"), (WIDTH, HEIGHT))

#Player variables
PLAYERHEIGHT = 130
PLAYERWIDTH = 20
PLAYERVELOCIT = 8

FONTE = pygame.font.SysFont("book", 30)
#functions
def bgdisplay(player1, elapsed_time):

    WIN.blit(BG, (0, 0))
    pygame.draw.rect(WIN, "black", player1)
    pygame.display.update()
    time_text = FONTE.render(f"Time: {round(elapsed_time)}s", 1, "white")
    WIN.blit(time_text, (10, 10))
    

def main():
    run = True

    player1 = pygame.Rect((40, 350), (PLAYERWIDTH, PLAYERHEIGHT))
    clock = pygame.time.Clock()
    start_time = time.time()
    elapsed_time = 0

    while run:
        clock.tick(60)
        elapsed_time = time.time() - start_time
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                break

        keys = pygame.key.get_pressed()
        if keys[pygame.K_w] and player1.y - PLAYERVELOCIT  >= 0:
            player1.y -= PLAYERVELOCIT
        if keys[pygame.K_s] and player1.y + PLAYERVELOCIT + player1.height <= HEIGHT:
            player1.y += PLAYERVELOCIT

        bgdisplay(player1, elapsed_time)
    pygame.quit()

#Filename Check
if __name__ == "__main__":
    main()

我试过使用freetype库,但没有成功。有没有什么建议可以帮我解决这个问题?

1 个回答

-1

你已经很接近了!

def bgdisplay(player1, elapsed_time) 这个函数里,你需要确保在更新显示屏 pygame.display.update() 之前,所有你想要绘制的内容都已经画好了,不管是通过什么方式。

def bgdisplay(player1, elapsed_time):
    WIN.blit(BG, (0, 0))
    pygame.draw.rect(WIN, "white", player1)
    time_text = FONTE.render(f"Time: {round(elapsed_time)}s", True, "white")
    WIN.blit(time_text, (100, 10))
    pygame.display.update() # <- This was moved to the bottom of the fn

撰写回答