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

SFML Loading images from txt file into vector only loads last image

本文关键字:图像 加载 最后一个 txt 文件 SFML      更新时间:2023-10-16

我正在尝试将 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()将图像加载到名为tempTexsf::Texture中。我设置了一个名为tempSpritesf::Sprite的纹理,并将其添加到spriteListstd::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图像。那是:

无论指数是什么,m_window.draw(spriteList[index])总是吸引6.png

SFML 精灵和纹理教程说

设置精灵的纹理时,它内部所做的只是存储指向纹理实例的指针。因此,如果纹理被销毁或移动到内存中的其他位置,则子画面最终会得到无效的纹理指针。

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