SFML将图像从txt文件加载到矢量中仅加载最后一个图像

时间:2018-03-28 17:54:45

标签: c++ sfml

我正在尝试将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()将图片加载到名为sf::Texture的{​​{1}}中。我设置了名为tempTex的{​​{1}}的纹理,并将其添加到sf::Sprite tempSprite

spriteList

问题是,每当我从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); } 始终会绘制6.png

1 个答案:

答案 0 :(得分:1)

SFML Sprites and Textures教程说

  

当您设置精灵的纹理时,它在内部所做的只是存储指向纹理实例的指针。因此,如果纹理被破坏或移动到内存中的其他位置,则精灵最终会出现无效的纹理指针。

根据我的理解,这也意味着如果将新纹理加载到同一个对象中,它将被覆盖。精灵仍将指向现在已更改的相同纹理。你需要保留一组纹理。