我最近开始使用 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/