gpt4 book ai didi

c++ - SFML 将 txt 文件中的图像加载到 vector 中只加载最后一张图像

转载 作者:行者123 更新时间:2023-11-28 04:44:31 26 4
gpt4 key购买 nike

我正在尝试将 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是一个字符串 vector 并使用断点,我可以看到它有正确的字符串(也就是正确的文件名)。

在下一个循环中,我使用 loadFromFile()将图像加载到 sf::Texture称为 tempTex .我设置了一个 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 中绘制任何 Sprite 到窗口时,它总是 6.png图像。即:

m_window.draw(spriteList[index])总是画6.png不管指数是多少。

最佳答案

SFML Sprites and Textures教程说

When you set the texture of a sprite, all it does internally is store a pointer to the texture instance. Therefore, if the texture is destroyed or moves elsewhere in memory, the sprite ends up with an invalid texture pointer.

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

关于c++ - SFML 将 txt 文件中的图像加载到 vector 中只加载最后一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com