3

我最近开始使用 SFML 库在 C++ 上开发基于图块的游戏。因为我对 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 地图时,它以慢 fps 运行。

对不起,我的英语不好!

提前致谢!

4

1 回答 1

4

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

但无论如何 - 正如@chris 所说,使用一维向量而不是二维数组可能会更快一些。但这不应该产生重大的性能变化。

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

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

于 2012-06-01T13:00:16.933 回答