平铺引擎性能问题

时间:2011-10-08 17:14:03

标签: c++ sfml

我正在使用SFML,但我找不到有关库如何工作的任何解释,而且我遇到了性能问题。 我正在尝试制作由50x50瓷砖制成的瓷砖地图,每个瓷砖宽度为20x20像素。 1)每个tile都是一个sf :: sprite,其图形图像只是一个大图像(我的tileset),我在其上设置了一个20x20的子矩形。 2)我只是循环遍历瓷砖总数并使用App.Draw(Map [i] [j]);绘制每个图块,我使用“视图”对象,以便我可以移动视图

现在我有一个非常低的FPS(1张图像/秒),我想知道与前面几点相关的两件事。 1)每个sf :: sprite是否需要时间来绘制,因为它们的图像来自一个被裁剪的巨大图像? 2)我是否正确地遍布整套瓷砖,即使是我没有看到的瓷砖?我假设视图对象使得视图之外的图块不会徒劳地重新计算

感谢

1 个答案:

答案 0 :(得分:2)

这通常被认为是渲染瓷砖地图的错误方法。

更正确的方法是创建一个大纹理,或者在这种情况下为sf::Image,然后将图块渲染到此纹理上,然后将这个大纹理渲染到屏幕上。有些情况下这种方法不可行,但在大多数情况下,情况要好得多。

这样,您只需在加载切片贴图时渲染每个切片一次,然后您只需为每个帧渲染一次大纹理,而不是为每个帧渲染2500个单独切片。

SFML使用OpenGL的方式对大量Draw()次调用并不友好,因此有助于找到尽可能少地调用它的方法。