win.blit() 后台 pygame 时出现滞后
- 2025-04-15 09:20:00
- admin 原创
- 29
问题描述:
我的游戏帧率出了点问题。我把帧率设成了 60,但实际帧率只有 25 帧左右。在显示背景之前,这个问题没有出现过(只有 才正常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()
解决方案 1:
确保背景 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()
主应用程序循环前后的某个位置)
解决方案 2:
screen.blit(pygame.image.load(picture.png))
相反image = pygame.image.load(picture.png)
,使用screen.blit(image)
(如果您持续不断地加载图片,就会出现滞后)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD