Python win.blit()背景游戏时滞后
我在游戏中的帧速率有问题。我已将其设置为60,但它只会达到25帧/秒。在显示背景之前,这不是一个问题(仅在Python win.blit()背景游戏时滞后,python,python-3.x,pygame,pygame-surface,pygame-clock,Python,Python 3.x,Pygame,Pygame Surface,Pygame Clock,我在游戏中的帧速率有问题。我已将其设置为60,但它只会达到25帧/秒。在显示背景之前,这不是一个问题(仅在win.fill(白色)时可以)。这里有足够的代码可以复制: 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
win.fill(白色)
时可以)。这里有足够的代码可以复制:
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()
确保背景曲面的格式与显示曲面的格式相同。用于创建具有相同像素格式的曲面。当背景显示为
blit
时,这将提高性能,因为格式是兼容的,blit
不必进行隐式转换
bg=pygame.image.load('images/bg.jpg').convert()
此外,创建字体一次就足够了,而不是每次绘制文本时。将
font=pygame.font.SysFont('Comic Sans MS',25,True)
移动到应用程序的开头(在pygame.init()
之后和主应用程序循环之前)确保背景面与显示面具有相同的格式。用于创建具有相同像素格式的曲面。当背景显示为blit
时,这将提高性能,因为格式是兼容的,blit
不必进行隐式转换
bg=pygame.image.load('images/bg.jpg').convert()
此外,创建字体一次就足够了,而不是每次绘制文本时。将
font=pygame.font.SysFont('Comic Sans MS',25,True)
移动到应用程序的开头(在pygame.init()之后的某个地方,在主应用程序循环之前)只需创建一次字体即可,而不是每次绘制文本时。将font=pygame.font.SysFont('Comic Sans MS',25,True)
移动到应用程序的开始(在pygame.init()之后的某个地方,在主应用程序循环之前)肯定有帮助,我不知道为什么我没有这样做。显示图像仍然会削弱帧速率t(使用win.fill最多可提高16倍)。如果执行bg=pygame.image.load('images/bg.jpg')。convert()
?现在执行,效果很好。问题解决了吗?答案可以接受吗?(答案左侧的复选标记)。只需创建一次字体即可,而不是每次绘制文本时。将font=pygame.font.SysFont('Comic Sans MS',25,True)
移动到应用程序的开始(在pygame.init()之后的某个地方,在主应用程序循环之前)肯定有帮助,我不知道为什么我没有这样做。显示图像仍然会削弱帧速率t(使用win.fill最多可提高16倍)。如果执行bg=pygame.image.load('images/bg.jpg')。convert()
?现在执行,效果很好。问题解决了吗?答案可以接受吗?(在答案左边打勾)。@LåneBook不客气。答案可以接受吗?(答案左边的复选标记)。请阅读好的建议。还有一个:缓存使用font.render()创建的曲面。就性能成本而言,呈现文本相当昂贵。@sloth是的。但不幸的是,文本似乎是动态的(fps),至少在这种情况下是如此。@LåneBook不客气。答案可以接受吗?(答案左边的复选标记)。请阅读好的建议。还有一个:缓存使用font.render()创建的曲面。就性能成本而言,呈现文本相当昂贵。@sloth是的。但不幸的是,文本似乎是动态的(fps),至少在这种情况下是如此。