Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 平铺引擎性能问题_C++_Sfml - Fatal编程技术网

C++ 平铺引擎性能问题

C++ 平铺引擎性能问题,c++,sfml,C++,Sfml,我正在使用SFML,我找不到任何关于该库如何工作的解释,而且我有性能问题。 我正在尝试制作一个由50x50个瓷砖组成的瓷砖贴图,每个瓷砖的宽度为20x20像素。 1) 每个瓷砖都是一个sf::sprite,其图形图像只是一个大图像(我的瓷砖集),我在上面设置了一个20x20的子矩形。 2) 我只是简单地在瓷砖总数上循环,并使用App.Draw(Map[I][j]);为了绘制每个瓷砖,我正在使用“视图”对象,以便可以四处移动视图 现在我有一个非常低的FPS(1图像/秒),我想知道与前面几点有关的两

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

现在我有一个非常低的FPS(1图像/秒),我想知道与前面几点有关的两件事。 1) 是否每个sf::sprite都需要时间来绘制,因为它们的图像来自一个被裁剪过的巨大图像? 2) 我在整个瓷砖上循环,即使是我没有看到的瓷砖,对吗?我假设视图对象使它成为这样,因此不在视图中的瓷砖不会徒劳地重新计算


谢谢,这通常被认为是渲染平铺贴图的错误方法

更正确的方法是创建一个大的纹理,或者在本例中是
sf::Image
,然后在该纹理上渲染平铺,然后在屏幕上渲染该大纹理。在某些情况下,这种方法不可行,但在大多数情况下,效果要好得多

这样,加载平铺贴图时,只需渲染每个平铺一次,然后只需为每个帧渲染一次大纹理,而不是为每个帧渲染2500个单独的平铺


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

向我们展示如何渲染地图(发布一些代码),这不应该发生。另外,您是在每次迭代还是在程序开始时裁剪瓷砖?我只是在做:for(int I=0;I