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
这样的完整路径,然后就可以了。
我正在尝试使用 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
这样的完整路径,然后就可以了。