在sfml中加载纹理

Loading a texture in sfml

本文关键字:纹理 加载 sfml      更新时间:2023-10-16

我开始学习SFML,我想创建精灵从文件中加载图像,所以我只是遵循教程并做了显而易见的事情。

sf::Texture texture;
texture.loadFromFile("C:image.png");
sf::Sprite sprite;
sprite.setTexture(texture);
window.draw(sprite);

当我启动程序时,我只是得到一个白屏和"在itsprgps.exe中的0x50CEDEDA (msvcr110.dll)处未处理异常:0xC0000005:访问违规读取位置0x00524000.",控制台也充满了随机符号。我试图寻找一些信息,但我只是发现"如果纹理被破坏或移动到内存的其他地方,精灵最终以无效的纹理指针",这可能是显而易见的一些人,但我在这方面是新的,他们没有给出任何工作的例子。

我正在使用SFML 2.1和Visual Studio 2013

编辑:

这是我的代码样本没有所有的形状之前,我试图加载纹理:

<标题>包括"stdafx.h"h1> 还意识到另一件事…我也不能加载字体,它发生了完全相同的事情,我想我知道为什么。当我开始这个项目时,我添加了用于发布而不是调试的库("sfml-system.lib;sfml-main.lib;而不是" sml -system-d.lib; sml -main-d.lib; sml -graphics-d.lib; sml -window-d.lib;")所以我认为这可能就是问题所在,所以我试图解决它,但我遇到了另一种问题。

长话短说:我尝试了调试和发布的适当配置,我得到了不同的错误,首先,我缺少一个MSVCR110D.dll,所以出于好奇只是下载了它并把它放在调试文件夹中,现在我得到0xc000007b。我尝试了不同的配置,唯一似乎有效的是调试与发布库(除了当试图加载纹理或字体到目前为止)。

("C:image.png");改为("C:\image.png");

很可能是单个反斜杠导致了这个问题,因为它是一个转义字符。

此外,您应该检查从loadFromFile返回的值,以确保它是成功的

我建议你把负责加载纹理的代码移出循环,并检查它的返回值。

即使这不能解决问题,您也可以遇到或排除与多个加载图像相关的任何问题。

代码:

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();
    }
}

看来您需要为您的Visual studio版本安装Visual c++ Redistributable,您可以在microsoft的网站上下载。

当在"链接器"中输入"在调试模式下配置,确保添加"-d"附加文件!

例子:sfml-system-d.lib