1

我正在制作基于图块的游戏,并且需要每帧渲染地图。现在,每个瓦片是 32X32,可见地图是 28X28 瓦片。表现是可怕的。我最近让它只渲染可见的瓷砖,但这仍然没有提高 FPS。现在我正在寻找一种加快渲染速度的方法。我将缓慢归因于我的渲染方式;每个图块都单独传送到屏幕上。这样做会更有效吗?

4

1 回答 1

2

在 pygame (afaik) 中,更新屏幕总是一个瓶颈。由于我看不到您的代码,我不知道您是如何更新屏幕的。只对改变的精灵进行 blitting 是一个开始,但您只需要在屏幕上更新那些改变的部分。display.flip()基本上这是使用或update_rects()仅使用更改的矩形之间的区别。我知道,当您滚动地图时,这根本没有帮助。看看这个问题:为什么这个 Python 上的小(155 行)吃豆人游戏运行这么慢?, 它有一个相似的主题。

当我有一个由瓷砖和一些精灵编译的地图时,我尝试过一件事,我尝试始终为包含当前显示部分和周围大约 200 个像素的区域提供地图的预编译图像,这样我就可以进行 blit准备好的“地面”(仍然只在更新的部分中),而不需要对其中包含的所有瓷砖进行涂抹。当然,这是你必须投入的一些想法,特别是如果你有多个图层和地图的一部分可以在你的活动精灵之上。思考和解决这个问题很有趣,但我不能告诉你,你会从中获得多少。

一种完全不同的可能解决方案:我从 pygame 开始一次(因为在那之前我在 C++ 中做过 SDL)。最近我被引导到另一个 python 游戏库:pyglet。这不会像 pygame 那样受到更新整个屏幕的问题的影响(我认为这是因为使用了 OpenGL 加速;它仍然适用于我根本没有加速的 eee-Netbook)。如果您不以任何方式绑定到 pygame,那么看看 pyglet 可能会很有趣。

于 2012-11-28T18:00:23.893 回答