Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python win.blit()背景游戏时滞后_Python_Python 3.x_Pygame_Pygame Surface_Pygame Clock - Fatal编程技术网

Python win.blit()背景游戏时滞后

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

我在游戏中的帧速率有问题。我已将其设置为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

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),至少在这种情况下是如此。