当前位置: 首页 > 知识库问答 >
问题:

在PyGame中渲染大图像导致低帧率

邴烨
2023-03-14

我试图在PyGame中制作一个“跑步者”风格的游戏(比如几何短跑),背景不断移动。到目前为止一切正常,但是背景图像的渲染限制了帧速率超过每秒35帧。在我添加无限/重复背景元素之前,它可以轻松地以60 fps的速度运行。这两行代码是负责的(当删除时,游戏可以以60 fps的速度运行):

screen.blit(bg,(bg_x,0))|screen.blit(bg,(bg_x2,0))

我能做些什么让游戏运行得更快吗?提前感谢!

简化源代码:

import pygame
pygame.init()

screen = pygame.display.set_mode((1000,650), 0, 32)
clock  = pygame.time.Clock()

def text(text, x, y, color=(0,0,0), size=30, font='Calibri'): # blits text to the screen
    text = str(text)

    font = pygame.font.SysFont(font, size)
    text = font.render(text, True, color)

    screen.blit(text, (x, y))

def game():
    bg = pygame.image.load('background.png')
    bg_x = 0 # stored positions for the background images
    bg_x2 = 1000

    pygame.time.set_timer(pygame.USEREVENT, 1000)
    frames = 0 # counts number of frames for every second
    fps = 0

    while True:
        frames += 1
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.USEREVENT: # updates fps every second
                fps = frames
                frames = 0 # reset frame count

        bg_x -= 10 # move the background images
        bg_x2 -= 10

        if bg_x == -1000: # if the images go off the screen, move them to the other end to be 'reused'
            bg_x = 1000
        elif bg_x2 == -1000:
            bg_x2 = 1000

        screen.fill((0,0,0))
        screen.blit(bg, (bg_x, 0))
        screen.blit(bg, (bg_x2, 0))

        text(fps, 0, 0)

        pygame.display.update()
        #clock.tick(60)

game()

这是背景图片:

共有1个答案

白星腾
2023-03-14

您是否尝试过使用convert()

    bg = pygame.image.load('background.png').convert()

文件中:

您通常会希望调用Surface。convert()不带参数,以创建一个可以更快地在屏幕上绘制的副本。

对于alpha透明度,像在. png图像中一样,在加载后使用convert_alpha()方法,以便图像具有每像素透明度。

 类似资料:
  • 问题内容: 我正在为我的第一个深度Pyglet项目开发2D Minecraft克隆,但遇到了一个问题。每当我在屏幕上有相当数量的块时,帧速率都会急剧下降。 这是我的渲染方法:我使用字典,键为元组(代表块的坐标),项为纹理。 我遍历整个字典并渲染每个块: PS sx和sy是屏幕滚动的坐标偏移 我想知道是否有一种方法可以更有效地渲染每个块。 问题答案: 我将尽力解释为什么以及如何在不真正了解代码外观的

  • 我正在尝试根据设备宽度提供响应/自适应图像。 原始图像: 与Srcset: 我面临两个问题: 1)即使在较小的设备上(如iPhone 6s),也会加载宽度为2000px的图像(它应该加载800px图像)。 2)我已经把两个图像(有和没有srcset)放在一起。它们都加载了具有相同维度的图像。然而,与其他版本相比,带有srcset的版本显得较小。因为html/css中没有指定宽度,所以它应该以实际图

  • 基本图像渲染 外部资源渲染 摄像机 材质系统 材质资源 Effect 渲染组件参考 Sprite 组件参考 Label 组件参考 LabelOutline 组件参考 LabelShadow 组件参考 Mask 组件参考 MotionStreak 组件参考 ParticleSystem 组件参考 TiledMap 组件参考 TiledTile 组件参考 Spine 组件参考 DragonBones

  • 我想在PDF上渲染图像,这将由FOP生成。为了渲染图像,我使用了标签< code > 我还尝试将完整的URL设置为: 在控制器中,我有一个请求映射,该映射从中获取图像名称 但是当我生成PDF时,我发现日志文件中的错误为: 但是,如果我复制这个URL并粘贴到URL中,那么图像会显示在浏览器中,我还发现,当我生成PDF时,应该调用图像解密的请求映射没有被调用。 更新 另外一个奇怪的想法是,我发现如果w

  • 问题内容: 有没有一种方法可以将html渲染为PNG图片?我知道画布是可能的,但我想呈现例如div之类的标准html元素。 问题答案: 我知道这是一个很老的问题,已经有了很多答案,但是我仍然花了几个小时来尝试做自己想做的事情: 给定一个html文件,从命令行生成具有 透明 背景的(png)图像 使用无头的Chrome(此响应的版本为74.0.3729.157),实际上很容易: 命令说明: 您可以从

  • 问题内容: 有没有一种方法可以将html渲染为PNG图片?我知道画布是可能的,但我想呈现例如div之类的标准html元素。 问题答案: 我知道这是一个很老的问题,已经有了很多答案,但是我仍然花了几个小时来尝试做自己想做的事情: 给定一个html文件,从命令行生成具有 透明 背景的(png)图像 使用无头的Chrome(此响应的版本为74.0.3729.157),实际上很容易: 命令说明: 您可以从