Pygame / SDL低帧率高清

时间:2016-07-16 12:01:31

标签: python performance pygame sdl frame-rate

我知道之前曾经问过类似这样的东西,但是我无法找到答案,而不是立即重新绘制整个屏幕。#34;这对于滚动的2D射击游戏来说真的不是一个选项,即使我没有必要更新整个屏幕,玩家也不会注意到帧率,除非你移动了,这就是整个屏幕需要重绘...

关于如何渲染游戏,整个游戏被绘制到480 * 270表面(renderLayer),然后在翻转显示之前将其放大到渲染功能结束时的屏幕尺寸。

在480 * 270窗口中运行游戏会产生数百帧的帧率,但是一旦游戏以1080p运行,我很幸运能够达到45到60fps之间。请记住,整个代码中更改的唯一部分是在每个更新帧结束时进行扩展,然后将缓冲区翻转到屏幕上,因此其余代码与此性能下降无关。

显示器初始化如下:

from haystack import indexes
from .models import Item

class ItemIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='name')
    updated = indexes.DateTimeField(model_attr='updated')

    def get_model(self):
        return Item

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

我使用了windib,因为它的帧速率比默认驱动程序略高一些。

在渲染结束后,所有对象都已经blit到renderLayer上。

os.environ['SDL_VIDEODRIVER'] = 'windib'
pygame.init()
display = pygame.display.set_mode((0,0),FULLSCREEN|DOUBLEBUF|HWSURFACE)

请记住,我通常使用clock.tick(60),因为它对于保持所有速度都很有用,特别是在同步化很重要的多人游戏中,但对于帧速率测试,我将它留作时钟。 tick()所以我可以准确地表示性能变化。

所以有人知道是否有办法在更高分辨率下增加帧率或另一种扩展到显示器的方法?我已经听说过使用openGL进行显示,但是从标准的pygame表面开始,不再可能在这些表面上进行blitting了。我可以从实验中看出来。

很抱歉,如果发布的代码非常短,但是使用2000多行代码游戏,我并不想浪费每个人的时间来处理代码之间没有区别的代码。低分辨率和高分辨率(游戏循环中其他所有功能都没有引用或使用显示 - 所有内容都使用renderLayer来实际绘制帧)。

非常感谢任何花时间阅读和/或回答我的查询的人,如果这个问题对于这个网站来说太具体了,我也很抱歉。我不知道还能在哪里问。

1 个答案:

答案 0 :(得分:0)

仅在启动时扩展您的资产。您的逻辑可以保持默认分辨率,但在blitting时进行偏移的数学计算。这样你就不会扩展每一帧。

关于pygame和性能的附注: pygame,又名sdl1使用软件渲染。这意味着您的GPU不会用于繁重的工作。如果您想查看它,则存在用于python的sdl2端口。