我最近开始使用 SFML 库在 C++ 上开发基于 tile 的游戏。因为我对 C++ 和 SFML 都没有太多经验,所以我很确定性能问题与我的代码有关。

基本思想是我有一个二维数组,我以这种方式动态创建:

Tile tiles**;

tiles = new Tile*[sizeX];

for(int i = 0; i < sizeX; i++)
   tiles[i] = new Tile[sizeY];

我以这种方式绘制所有内容:
for(int x = 0; x < sizeX; x++)
{
   for(int y = 0; y < sizeY; y++)
   {
       tiles[x][y].Draw(app);
   }
}

变量 app 是 sf::RenderWindow 并且它作为引用传递给函数。

当我绘制 10x10 map 时,它以慢速 fps 运行。

对不起,我的英语不好!

提前致谢!

最佳答案

您的性能问题可能与迭代二维数组无关。可能是Tile::Draw性能的原因,所以尝试优化一下。

但无论如何 - 正如@chris 所说,使用一维 vector 而不是二维数组可以更快一点。但这不应该导致显着的性能变化。

渲染图块贴图的正确方法是创建一个大纹理,然后将您的图块渲染到该纹理上,然后将这个大纹理渲染到屏幕上,而不是像通常在 XNA 中那样渲染每个图块。

那是因为 SFML 使用 OpenGL 的方式对大量 Draw() 调用并不友好。

关于c++ - C++ SFML 的性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10834023/

10-11 22:48
查看更多