C++ SFML 无法加载图像,原因:无法打开文件

C++ SFML Failed to load image, reason: Unable to open file

我正在尝试使用 SFML 库在 C++ 中显示空的 window。但是,当我使用 loadFromFile 加载图像时出现错误。

Failed to load image "enemy.png". Reason: Unable to open file

图像“enemy.png”在源文件目录中(使用 Visual Studio 2019),以及 main.cpp 文件。我已经下载了 SFML x64 位文件并通过项目属性使用了动态链接。我试图删除加载图像部分,并成功加载 window。但是这样不好,下次要加载图片的话就不行了。

代码如下:

#include <SFML/Graphics.hpp>

int main() {
    float windowHeight = 400;
    float windowWidth = 400;

    sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "Rougelike");
    
    sf::Texture texture;
    if (!texture.loadFromFile("enemy.png")) {
        return 0;
    }
    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();
        window.draw(sprite);
        window.display();
    }
}

在 运行 代码之后,这是我从输出中得到的:

Build started...
1>------ Build started: Project: Project1, Configuration: Debug x64 ------
1>main.cpp
1>D:\XXX\XXX\Project1\Project1\main.cpp(7,56): warning C4244: 'argument': conversion from 'float' to 'unsigned int', possible loss of data
1>D:\XXX\XXX\Project1\Project1\main.cpp(7,43): warning C4244: 'argument': conversion from 'float' to 'unsigned int', possible loss of data
1>Project1.vcxproj -> D:\XXX\XXX\Project1\x64\Debug\Project1.exe
1>Done building project "Project1.vcxproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

这是我从命令提示符中得到的:

Failed to load image "enemy.png". Reason: Unable to open file
D:\XXX\XXX\Project1\x64\Debug\Project1.exe (process 19768) exited with code 0.
Press any key to close this window . . .

谢谢。

您没有指定 png 文件的路径,因此使用“当前工作目录”。这是不可靠的,因为 Visual Studio 可能使用项目文件夹或其他东西。您也可以在 Progect 的属性中更改它。

对于Windows,我建议将您的资产保存在相对于包含可执行文件的文件夹的路径中。然后,您始终可以在运行时使用 GetModuleFileName.

获取 that 路径

我遇到了同样的问题。我将图像放在项目的 root 中,但没有用。然后我在windows中的资源管理器中搜索文件并复制了C:\Users\myname\project\graphics\yourimage.png这样的完整路径,然后就可以了。