我最近开始使用SFML库在C ++上开发基于磁贴的游戏。因为我对C ++和SFML都没有太多的了解,所以我非常认为性能问题与我的代码有关。
基本的想法是我有和我用这种方式动态创建的2d瓷砖阵列:
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地图时,它会以慢速fps运行。
抱歉我的英文不好!
提前致谢!
答案 0 :(得分:4)
您的性能问题可能与迭代2D阵列无关。这可能是因为Tile::Draw
性能,所以尝试优化它。
但无论如何 - 正如@chris所说,使用1D向量而不是2D数组可能会快一点。但这不应该使显着的性能发生变化。
渲染平铺贴图的正确方法是创建一个大纹理,然后将贴图渲染到此贴图上,然后将这个大纹理渲染到屏幕上,而不是渲染每个贴图,就像您通常所做的那样XNA。
这是因为SFML使用OpenGL的方式对大量Draw()
次呼叫不友好。