【问题标题】:Everytime I draw list item in SFML it crashes?每次我在 SFML 中绘制列表项时它都会崩溃?
【发布时间】:2014-12-17 22:06:33
【问题描述】:

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

【问题讨论】:

  • 来自laserList.push_back(laser);laser从何而来?
  • @Quirliom 这是我按下按钮时调用的触发函数。据我了解,这就是您将某些内容推入列表的方式?
  • 是的,但问题仍然存在:你到底在推动什么。
  • 我将精灵激光推送到列表中,以便稍后绘制精灵

标签: c++ list game-physics sfml


【解决方案1】:

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

【讨论】:

  • &Quirliom 好的,我已经通过添加它++ 来正确地浏览列表来解决这个问题。
  • @user1626342 如果它解决了问题,请接受答案(当 SO 允许时)将其从未回答的问题列表中删除
  • 是的,我会再过 3 分钟无法选择它!谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多