python - win.blit()后台pygame时出现滞后

标签 python python-3.x pygame pygame-surface pygame-clock

我的游戏帧率出现问题。我将其设置为 60,但它仅达到约 25fps。在显示背景之前这不是问题(仅使用 win.fill(WHITE) 就可以了)。这里有足够的代码来重现:

import os, pygame
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (50, 50)
pygame.init()

bg = pygame.image.load('images/bg.jpg')

FPS = pygame.time.Clock()
fps = 60

WHITE = (255, 255, 255)
BLUE = (0, 0, 255)

winW = 1227
winH = 700
win = pygame.display.set_mode((winW, winH))
win.fill(WHITE)
pygame.display.set_icon(win)


def redraw_window():

    #win.fill(WHITE)
    win.blit(bg, (0, 0))

    win.blit(text_to_screen('FPS: {}'.format(FPS.get_fps()), BLUE), (25, 50))

    pygame.display.update()


def text_to_screen(txt, col):
    font = pygame.font.SysFont('Comic Sans MS', 25, True)
    text = font.render(str(txt), True, col)
    return text


run = True
while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    redraw_window()

    FPS.tick(fps)

pygame.quit()

最佳答案

确保背景Surface与显示Surface具有相同的格式。使用convert()创建具有相同像素格式的 Surface。当背景被blit显示时,这应该会提高性能,因为格式是兼容的并且blit不必执行隐式转换。

bg = pygame.image.load('images/bg.jpg').convert()

此外,创建字体一次就足够了,而不是每次绘制文本时都创建。将 font = pygame.font.SysFont('Comic Sans MS', 25, True) 移动到应用程序的开头(pygame.init() 之后和之前的某个位置)主应用程序循环)

关于python - win.blit()后台pygame时出现滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59312019/

相关文章:

python - 如何获取第一个span标签?

python - 在 Python 中对日期时间进行计算

python - 我需要在 Replit 上播放声音方面的帮助

python - pygame.event.Event().type == pygame.QUIT,困惑

python - 如何在 Python 中显示 ZSI.ServiceProxy 的传出和传入 SOAP 消息?

python - 如果数组 0 发生更改,则保持数组大小不变

python - 如何通过python获取 'java -version'输出

python-3.x - numpy 是如何添加 @ 运算符的?

python - 如何在实例上调用变量,以便在也是实例的属性上调用变量

python - 如何在pygame中的两个列表之间画线?