【问题标题】:Why is blitting images on the screen making my game very very slow?为什么屏幕上的图像会导致我的游戏非常缓慢?
【发布时间】:2022-10-14 18:08:52
【问题描述】:

我在屏幕上显示了一个健康栏,似乎在屏幕上显示图像是导致问题的原因,我删除了 for 循环,每当我让玩家跳转时,性能似乎非常非常糟糕,当我删除整个功能时玩家正在快速移动和快速跳跃,而不是非常非常慢。什么可能导致此问题? /(请忘记与问题无关的screens[0].blit)

代码:

def lives(lives_image1, lives_image2, x,y,lives_amount,lives_amount2, draw_lives):
    if len(screens) >= 1:
        if draw_lives:
            for i in range(lives_amount2):
                screens[0].blit(pygame.image.load(lives_image2),(x + pygame.image.load(lives_image2).get_width() * i,y))
            for i in range(lives_amount):
                screens[0].blit(pygame.image.load(lives_image1), (x + pygame.image.load(lives_image1).get_width() * i,y))
    if lives_amount <= 0:
        lives_amount = 0
    return lives_amount
    pass

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    您的应用程序很慢,因为您每帧都从文件中加载图像。在应用程序循环之前加载图像一次,但blit 每帧它们:

    def load_lives(lives_image)
        return pygame.image.load(lives_image);
    
    def lives(lives1_surf, lives2_surf, x, y, lives_amount, lives_amount2, draw_lives):
        if len(screens) >= 1:
            if draw_lives:
                for i in range(lives_amount2):
                    screens[0].blit(lives2_surf,(x + lives2_surf.get_width() * i, y))
                for i in range(lives_amount):
                    screens[0].blit(lives1_surf, (x + lives1_surf.get_width() * i, y))
        if lives_amount <= 0:
            lives_amount = 0
        return lives_amount
    
    lives1_surf = load_lives(lives_image1);
    lives2_surf = load_lives(lives_image2);
    
    while run:
        # [...]
    
        lives(lives1_surf, lives2_surf, ......)
    
        # [...]
    

    请注意,pygame.image.load 是一项非常昂贵的操作。该函数需要从磁盘加载图像文件,最后需要对图像进行解码。

    【讨论】:

    • 天哪,你又疯了,天啊,非常感谢你,我非常爱你,因为我总是看到你到处帮助人们左右。感谢您的帮助
    • 但是我从另一个文件中调用函数并且该文件处于while循环中,所以我必须在while循环中运行该函数,那么如何使用包含该函数的文件从循环外部加载图像? ?
    • ??你能给我一个例子吗?
    • 是的,这有效,但问题是我需要从包含 while 循环的文件(包含函数的文件)外部加载图像。那是必不可少的。
    • @Morris 我又改了答案
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多