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

Everytime I draw list item in SFML it crashes?

本文关键字:崩溃 列表 SFML 绘制      更新时间:2023-10-16

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

你的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);
}