我正在尝试将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
。
答案 0 :(得分:1)
当您设置精灵的纹理时,它在内部所做的只是存储指向纹理实例的指针。因此,如果纹理被破坏或移动到内存中的其他位置,则精灵最终会出现无效的纹理指针。
根据我的理解,这也意味着如果将新纹理加载到同一个对象中,它将被覆盖。精灵仍将指向现在已更改的相同纹理。你需要保留一组纹理。