我正在制作一个基于图块的游戏,并且每一帧都需要渲染地图。现在,每个图块为32X32,可见地图为28X28图块。表现可怕。我最近做的只是渲染可见的瓷砖,但这仍然没有提高FPS。现在我正在寻找一种加速渲染的方法。我将缓慢归因于我渲染的方式;每个瓷砖都单独插入屏幕。这样做会更有效吗?
答案 0 :(得分:2)
在pygame(afaik)中,更新屏幕总是一个瓶颈的地狱。由于我看不到你的代码,我不知道你是如何更新屏幕的。只更改改变的精灵是一个开始,但你只需要在屏幕上更新那些已更改的部分。
基本上,使用display.flip()
或仅使用update_rects()
与仅更改的rects之间存在差异。我知道,当你滚动地图时,这根本没有用。
看一下这个问题:Why is this small (155 lines-long) Pacman game on Python running so slow?,它有一个类似的主题。
当我在地图上编制了瓷砖和一些精灵的地图时,我尝试了一件事,我尝试了一个包含当前显示部分的区域的预编译图像,并且周围有大约200个像素,所以我可以把准备好的“地面”(仍然只在更新的部分中)搞定,而不需要在其中包含所有那些瓷砖。当然,这有点像你必须考虑的那样,特别是如果你有多个图层和部分地图可以在你的活动精灵之上。通过思考和工作是有趣的,但我不能告诉你,你将获得多少收益。
一种完全不同的可能解决方案:我开始使用pygame一次(因为我之前在C ++中使用过SDL)。最近我被引导到另一个python游戏库:pyglet。这并没有像pygame一样更新整个屏幕的问题(我认为这是因为使用了OpenGL加速;它仍然适用于我没有加速的eee-Netbook)。如果你不以任何方式绑定pygame,那么看看pyglet可能会很有趣。