SFML loadFromFile 命令的问题
Problems with SFML loadFromFile command
我正在尝试使用 SFML 2.0 获取棋盘的图形表示。问题是我根本无法加载纹理,命令 loadFromFile 不起作用,我也不知道为什么。我已经在网上搜索过,也在 Stack Overflow 中搜索过,但我没有找到解决方案。
我现在做了什么:
- 设置包含和库、.dll 和 .libs 的所有依赖关系
- 正在将文本格式从 unicode 更改为多字节。
- 正在将 .dll 复制到工作文件夹中(出现错误 visual studio 无法找到 dll,即使我将它们链接到项目中)
- 使用图像文件的完整路径
- 使用带有 2 个参数的 LoadFile 命令(尽管我猜第二个参数是可选的)
- 将运行时库从 MDd 更改为 MD(尝试使其在发布模式下工作)
- 不链接所有库,而只链接那些以 ....-d.lib 结尾的库(如在另一个 Stack Overflow 线程中假设的那样)
我用的是Windows7,Visual Studio版本15.3.3
这是我的代码:
#include <SFML/Graphics.hpp>
#include <time.h>
#include <iostream>
int main() {
sf::RenderWindow window(sf::VideoMode(437, 437), "MattseChess!");
sf::Texture t1;
if (!t1.loadFromFile("C:/Users/Mattse/source/repos/Chess/Chess/images/figures.png")) {
std::cout << "Error loading texture" << std::endl;
}
return 0;
}
接下来我要尝试什么?
您应该始终使用相对路径 ("images/figures.png"
) 打开文件。它与可执行文件相关。
并检查其他 PNG
图像,看看它是否不是来自 SFML 因任何原因无法加载的图像(并尝试 gimp 使用不同的选项重新导出它,例如隔行扫描)
问题已解决,实际上是我忘记在链接器->输入设置中删除一个库。我现在只有那些以 -d 结尾的,即使是那些没有 -d 等价物的也被删除了。
链接库列表:
sfml-audio-d.lib
sfml-graphics-d.lib
sfml-main-d.lib
sfml-network-d.lib
sfml-network-s-d.lib
sfml-system-d.lib
sfml-system-s-d.lib
sfml-window-d.lib
sfml-window-s-d.lib
我猜(根据 C:\Users\
部分)您使用的是 Windows 系统。
虽然Windows应该支持斜杠作为路径分隔符,但Windows中的官方路径分隔符是反斜杠.它需要在 C++ 中进行转义,因此您的完整路径为:
"C:\Users\Mattse\source\repos\Chess\Chess\images\figures.png"
我正在尝试使用 SFML 2.0 获取棋盘的图形表示。问题是我根本无法加载纹理,命令 loadFromFile 不起作用,我也不知道为什么。我已经在网上搜索过,也在 Stack Overflow 中搜索过,但我没有找到解决方案。
我现在做了什么:
- 设置包含和库、.dll 和 .libs 的所有依赖关系
- 正在将文本格式从 unicode 更改为多字节。
- 正在将 .dll 复制到工作文件夹中(出现错误 visual studio 无法找到 dll,即使我将它们链接到项目中)
- 使用图像文件的完整路径
- 使用带有 2 个参数的 LoadFile 命令(尽管我猜第二个参数是可选的)
- 将运行时库从 MDd 更改为 MD(尝试使其在发布模式下工作)
- 不链接所有库,而只链接那些以 ....-d.lib 结尾的库(如在另一个 Stack Overflow 线程中假设的那样)
我用的是Windows7,Visual Studio版本15.3.3
这是我的代码:
#include <SFML/Graphics.hpp>
#include <time.h>
#include <iostream>
int main() {
sf::RenderWindow window(sf::VideoMode(437, 437), "MattseChess!");
sf::Texture t1;
if (!t1.loadFromFile("C:/Users/Mattse/source/repos/Chess/Chess/images/figures.png")) {
std::cout << "Error loading texture" << std::endl;
}
return 0;
}
接下来我要尝试什么?
您应该始终使用相对路径 ("images/figures.png"
) 打开文件。它与可执行文件相关。
并检查其他 PNG
图像,看看它是否不是来自 SFML 因任何原因无法加载的图像(并尝试 gimp 使用不同的选项重新导出它,例如隔行扫描)
问题已解决,实际上是我忘记在链接器->输入设置中删除一个库。我现在只有那些以 -d 结尾的,即使是那些没有 -d 等价物的也被删除了。
链接库列表:
sfml-audio-d.lib
sfml-graphics-d.lib
sfml-main-d.lib
sfml-network-d.lib
sfml-network-s-d.lib
sfml-system-d.lib
sfml-system-s-d.lib
sfml-window-d.lib
sfml-window-s-d.lib
我猜(根据 C:\Users\
部分)您使用的是 Windows 系统。
虽然Windows应该支持斜杠作为路径分隔符,但Windows中的官方路径分隔符是反斜杠.它需要在 C++ 中进行转义,因此您的完整路径为:
"C:\Users\Mattse\source\repos\Chess\Chess\images\figures.png"