Pygame/SDL高清低帧速率

2024-09-30 22:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道类似的问题以前也有人问过,但除了“不要立刻重画整个屏幕”之外,我找不到答案,因为对于滚动式2D射手来说,即使我没有必要更新整个屏幕,玩家也不会注意到帧速率,除非你移动了整个屏幕,也就是说,当整个屏幕移动时需要重新绘制。。。在

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

在480*270的窗口中运行游戏,帧速率可以达到数百,但只要游戏运行在1080p,我就幸运地获得了45到60fps的帧速率。请记住,整个代码中唯一更改的部分是在每个更新帧结束时按比例放大,然后将缓冲区翻转到屏幕上,因此其余代码与性能下降无关。在

显示初始化如下:

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

我使用windib是因为它产生的帧速率比默认驱动稍高一些。在

在所有对象都被blit到renderLayer之后,渲染结束。在

^{pr2}$

记住我通常用时钟滴答声(60),因为它有助于保持一切都在正确的速度,特别是在多人游戏中,同步是很重要的,但是对于帧速率测试,我还是把它放在一边时钟滴答声()这样我就可以得到性能变化的准确表示。在

那么,有人知道有没有一种方法可以在更高分辨率下提高帧速率,还是有其他方法可以放大显示?我听说过使用openGL来显示,但是从我在实验中所能看到的,从标准的pygame表面上,blitting到这些表面已经不可能了。在

抱歉,如果发布的代码很短,但是对于一个2000+行代码的游戏,我不想浪费每个人的时间在那些对低分辨率和高分辨率的帧速率没有影响的代码上(在游戏循环中的其余函数中,显示器根本没有被引用或使用——所有的东西都使用renderLayer来进行实际的帧绘制)。在

在此之前,我非常感谢所有愿意花时间阅读和/或回答我的问题的人,如果这个问题对本网站来说过于具体,我也深表歉意。我不知道还能问哪里。在


Tags: 方法代码游戏屏幕速率display时间绘制
1条回答
网友
1楼 · 发布于 2024-09-30 22:27:29

只在启动时扩展你的资产一次。你的逻辑可以保持默认的分辨率,但是在blitting时计算偏移量。这样就不会缩放每一帧。在

关于pygame和性能的补充说明: pygame,又名sdl1,使用软件渲染。这意味着你的GPU不是用来做重量级的。如果您想了解一下,python中存在sdl2端口。在

相关问题 更多 >