【问题标题】:Performance issue with C++ SFMLC++ SFML 的性能问题
【发布时间】:2012-06-05 17:38:45
【问题描述】:

我最近开始使用 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 运行。

对不起,我的英语不好!

提前致谢!

【问题讨论】:

  • 您可能需要考虑使用 2D std::vector。使用起来要容易得多。为提高性能,将底层向量设为 1D,并将其包装在 2D Matrix 类中。
  • draw是如何实现的?
  • 将你的 [x][y] 反转为 [y][x]:在 Y 上循环 {在 Y 上循环 {titles[y][x];}} 它会增加你的内存访问。

标签: c++ sfml


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2021-01-04
    • 1970-01-01
    • 2020-07-23
    • 2010-12-04
    • 2011-04-16
    • 1970-01-01
    • 2016-08-10
    • 2012-07-01
    相关资源
    最近更新 更多