每次我在SFML中绘制列表项时都会崩溃吗?

时间:2014-12-17 22:06:33

标签: c++ list game-physics sfml

所以我在创建列表并使用SFML库将其写入窗口时遇到了一个小问题。基本上发生的事情是,当我执行fire()函数时,游戏会冻结&崩溃。

可变代码:

 sf::Sprite laser;

列表代码是:

 std::list<sf::Sprite>laserList;

火警代码(当我点击按钮时调用):

 bool fire(void)
 {
   laserList.push_back(laser);
   return true;
 }

这是窗口的绘图代码:

//This is code for running through and drawing each sprite in list
for(std::list<sf::Sprite>::iterator it = laserList.begin(); it != laserList.end(); laserList;)
{
    app.draw(*it);
}

1 个答案:

答案 0 :(得分:2)

你的for循环在这里有点奇怪:

for(std::list<sf::Sprite>::iterator it = laserList.begin(); it != laserList.end(); laserList;)

您会发现这会形成一个无限循环,因为it的值永远不会改变。这可能是导致您崩溃的原因。要修复它,你想在每个循环后增加迭代器:

for(std::list<sf::Sprite>::iterator it = laserList.begin(); it != laserList.end(); ++laserList)

有一个修改建议以下但由于某种原因被拒绝。我已在此处添加了完整性

通过使用C ++ 11中引入的基于范围的for循环,可以避免对此语法的任何混淆:

for(sf::Sprite spr : laserList){
    app.draw(spr);
}