小编Zam*_*kun的帖子

C++ 11:为什么这个范围循环会将FPS降低35?

我正在使用SFML和C++ 11功能编写游戏,例如范围循环.在处理平铺地图时,我基本上为每个地图平铺创建了一个类,一个轻量级类,只包含其精灵,位置等,然后构建一些嵌套向量来表示游戏地图图层.

为了优化一次在屏幕上绘制数千个对象的过程,我只是简单地绘制了玩家看到的内容.这很顺利.

我有以下渲染游戏地图的方法,如果磁贴位置在摄像机边界内,则条件基本上返回true

void gameMap::render(sf::RenderWindow &winMain, sf::Vector2f offset) {
      for(vector<int> vec1 : backgroundData)
           for(int i : vec1)
              if(collides(i.pos, offset)
                 myWindow.draw(i.sprite);

     }
Run Code Online (Sandbox Code Playgroud)

它工作正常,但在游戏中我大致得到30 FPS,并且有很多粗糙的动作.但令我惊讶的是,下面的代码做同样的事情,呈现相同数量的瓷砖精灵,但运行速度为65 fps,运动非常流畅

void gameMap::render(sf::RenderWindow &winMain, sf::Vector2f offset) {
          for(int i = 0; i < backgroundTiles.size(); i++)
               for(int j = 0; j < backgroundTiles[i].size(); j++)
                  if(collides(backgroundTiles[i][j].pos, offset)
                     myWindow.draw(backgroundTiles[i][j].sprite);

         }
Run Code Online (Sandbox Code Playgroud)

为什么会这样?C++ 11基于范围的循环比旧学校慢得多吗?我真的很想听到这个答案,因为我的眼睛老实说更喜欢基于范围的循环,我不想发现基于范围的循环慢两倍.

c++ performance c++11

25
推荐指数
1
解决办法
2942
查看次数

标签 统计

c++ ×1

c++11 ×1

performance ×1