【发布时间】:2018-03-28 17:54:44
【问题描述】:
我正在尝试将 6 张图片加载到我的状态机中的 std::vector(sf::Sprite) 中。状态机工作正常,所以我怀疑这是问题所在。
我有一个 .txt 文件,其中包含图像的文件名
1.png
2.png
3.png
4.png
5.png
6.png
图像本身位于img/ 目录中。
以下是相关代码:
std::ifstream file("images.txt");
while (!(file.eof()))
{
getline(file, TmpString);
filename.push_back(TmpString);
}
TmpString 只是一个字符串变量,用于存储单个图像的文件名。 filename 是一个字符串向量,使用断点,我可以看到它有正确的字符串(也就是正确的文件名)。
在下一个循环中,我使用loadFromFile() 将图像加载到名为tempTex 的sf::Texture 中。我设置了sf::Sprite称为tempSprite 的纹理并将其添加到spriteList,即std::vector<sf::Sprite>。
for (size_t i = 0; i < filename.size(); i++)
{
tempTex.loadFromFile("img/" + filename[i]);
tempSprite.setTexture(tempTex, true);
spriteList.push_back(tempSprite);
}
问题是,每当我从 spriteList 向窗口绘制任何精灵时,它始终是 6.png 图像。那就是:
m_window.draw(spriteList[index]) 总是绘制6.png 无论索引是什么。
【问题讨论】:
-
@NeilButterworth 将 while 循环更改为
while(file >> TmpString),然后添加到字符串向量中没有任何作用。就像我在问题中所说的那样,我已经通过调试检查了字符串向量是否包含正确的文件名,while 循环不是问题。问题出在 for 循环中,但我无法调试以查看每个索引中的图像。 spriteList 仅包含所有索引上的6.png图像。