所以我在创建列表并使用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);
}
答案 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);
}