我开始学习SFML,我想创建sprite来从文件中加载图像,所以我只是按照教程进行了显而易见的事情。
sf::Texture texture;
texture.loadFromFile("C:\image.png");
sf::Sprite sprite;
sprite.setTexture(texture);
window.draw(sprite);
当我启动程序时,我只是得到一个白色屏幕,并在其“exegps.exe:0xC0000005:访问冲突读取位置0x00524000”中的“0x50CEDEDA(msvcr110.dll)处于未处理的异常。”,控制台也充满了随机符号。我试图寻找一些信息,但我刚刚发现“如果纹理被破坏或移动到内存中的其他位置,精灵最终会出现一个无效的纹理指针”,对于某些人来说这可能是显而易见的,但我是新手并且他们不要提供任何有效的例子。
我是SFML 2.1和Visual Studio 2013的用户
编辑:
这是我的代码示例,没有我在尝试加载纹理之前绘制的所有形状:
int main()
{
sf::RenderWindow window(sf::VideoMode(557, 500), "My window");
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color(255, 255, 255));
sf::Texture texture;
texture.loadFromFile("C:\roads.png");
sf::Sprite sprite;
sprite.setTexture(texture);
window.draw(sprite);
window.display();
}
return 0;
}
我也意识到了其他的东西......我也无法加载字体,它发生了完全相同的事情,我想我知道为什么。当我启动项目时,我添加了库而不是debug(“sfml-system.lib; sfml-main.lib; sfml-graphics.lib; sfml-window.lib;”而不是“sfml-system-d”。 lib; sfml-main-d.lib; sfml-graphics-d.lib; sfml-window-d.lib;“)所以我认为这可能实际上是问题,所以我试图解决它,但我遇到了另一种问题。
长话短说:我尝试了正确的调试和发布配置,我得到了不同的错误,首先,我错过了一个MSVCR110D.dll所以出于好奇只是下载它并把它放在调试文件夹中,现在我得到0xc000007b。我尝试了不同的配置,唯一似乎有效的是使用发布库进行调试(目前为止尝试加载纹理或字体时除外)。
答案 0 :(得分:1)
将("C:\image.png");
更改为("C:\\image.png");
。
单个反斜杠很可能导致问题,因为它是一个转义字符。
此外,您应该检查loadFromFile
的返回值,以确保它成功。
答案 1 :(得分:1)
我建议你将负责纹理的代码移出循环并检查其返回值。 如果此事件无法解决问题,您可以遇到或排除与多个加载图像相关的任何问题。
代码:
int main()
{
sf::RenderWindow window(sf::VideoMode(557, 500), "My window");
sf::Texture texture;
if(!texture.loadFromFile("C:\roads.png"))
{
std::cerr << "failed to load image" << std::endl;
exit(1);
}
sf::Sprite sprite;
sprite.setTexture(texture);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color(255, 255, 255));
window.draw(sprite);
window.display();
}
}
答案 2 :(得分:0)
您似乎需要为您的Visual Studio版本安装Visual C ++ Redistributable,您可以在microsoft的网站上下载。
答案 3 :(得分:0)
在调试模式下的“链接器输入”配置中,请确保将“-d”添加到附加文件中!
示例:sfml-system-d.lib