c++ - 在 sfml 中加载纹理

标签 c++ sfml

我开始学习 SFML,我想创建 sprite 以从文件加载图像,所以我只是按照教程做了显而易见的事情。

sf::Texture texture;
texture.loadFromFile("C:\image.png");

sf::Sprite sprite;
sprite.setTexture(texture);
window.draw(sprite);

当我启动程序时,我只看到一个白屏和“itsprgps.exe 中 0x50CEDEDA (msvcr110.dll) 的未处理异常:0xC0000005:访问冲突读取位置 0x00524000。”,控制台也充满了随机符号。我试图寻找一些信息,但我只是发现“如果纹理被破坏或移动到内存中的其他地方, Sprite 最终会得到一个无效的纹理指针”,这对某些人来说可能是显而易见的,但我是新手,他们不要给出任何工作示例。

我正在使用 SFML 2.1 和 Visual Studio 2013

编辑:

这是我的代码示例,没有我在尝试加载纹理之前绘制的所有形状:

包含“stdafx.h”

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

我还意识到其他事情...我也无法加载字体,它发生的事情完全相同,我想我知道为什么。当我开始这个项目时,我添加了用于发布而不是调试的库(“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。我尝试了不同的配置,唯一似乎有效的配置是使用发布库进行调试(到目前为止尝试加载纹理或字体时除外)。

最佳答案

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

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

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

关于c++ - 在 sfml 中加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358968/

相关文章:

c++ - 默认模板类参数混淆了 g++?

c++ - 我是否错误地使用了 ncurses 库中的 getch() 函数?

c++ - 从内存中加载图像

c++ - 我将如何使用 Bullet Physics Library 设置碰撞?

c++ - QML 中的设置值保存在哪里?

c++ - 在 Windows 中获取下一个打开的 tcp 端口

c++ - 这个私有(private)变量 "not declared in this scope"怎么样?

c - 对 _imp_sfBlendAlpha 的 undefined reference

c++ - SFML游戏开发书籍——理解FPS计算

c++ - 检测到缓冲区溢出