SFML 将图像从 txt 文件加载到矢量中仅加载最后一个图像
SFML Loading images from txt file into vector only loads last image
我正在尝试将 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
中。我设置了一个名为tempSprite
的sf::Sprite
的纹理,并将其添加到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
图像。那是:
无论指数是什么,m_window.draw(spriteList[index])
总是吸引6.png
。
SFML 精灵和纹理教程说
设置精灵的纹理时,它内部所做的只是存储指向纹理实例的指针。因此,如果纹理被销毁或移动到内存中的其他位置,则子画面最终会得到无效的纹理指针。
根据我的理解,这也意味着如果您将新纹理加载到同一对象中,它将被覆盖。精灵仍将指向现在已更改的相同纹理。您需要保留纹理集合。
相关文章:
- 无法将图像加载到纹理矢量 (SFML)
- 如何将硬编码图像加载到 OpenGL 纹理中
- C++ SDL2 图像加载格式与.bmp不同
- 土壤图像加载库参数
- 示例文件中的CImg图像加载错误
- OpenGL图像加载64位深度
- SFML图像加载在发布版本上失败 - 文件名损坏
- 如何将图像加载到painter.drawimage函数
- 将图像加载到Mat-vvector<向量<垫子>>
- OpenCV图像加载程序退出
- 从字节数组将图像加载到图形视图中
- 将图像加载到现有Mat中
- 处理文件和图像加载异常的最佳方法是什么?
- 将PNG或JPG图像加载到CMFCToolBarImages中
- stb图像加载库返回白色纹理
- 创建垫子后,从字节向量将图像加载到垫子上
- 图像加载功能不工作
- 将UTF-16图像加载到内存中
- 我怎么能得到像素的颜色在我的图像(加载灰色)
- 正在将位图图像加载到按钮