SFML loadFromFile命令的问题

时间:2017-12-09 13:35:14

标签: c++ image sfml

我试图用SFML 2.0获得棋盘的图形表示。 问题是我根本无法加载纹理,命令loadFromFile不起作用,我不知道为什么。我已经用谷歌搜索了大约2个小时,也在stackoverflow中,但我没有找到解决方案。

我现在做了什么:

  • 设置包含和库的所有依赖项,.dll' s和.libs
  • 将文本格式从unicode更改为多字节。
  • 将.dll复制到工作文件夹中(即使我在项目中将它们链接在一起,但Visual Studio无法找到dll的错误)
  • 使用图像文件的整个路径
  • 使用带有2个参数的LoadFile命令(即使第二个是可选的,我猜)
  • 将运行时库从MDd更改为MD(尝试使其在发布模式下工作)
  • 不链接所有库,但只链接....- d.lib结尾(如另一个stackoverflow-thread所假设的那样)

我使用Windows 7,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;
}

我没有更多想法可以尝试,我希望你能帮助我。提前谢谢!

3 个答案:

答案 0 :(得分:0)

您应始终打开具有相对路径(/usr/local/etc/rc.d/<myappname>)的文件。它是可执行文件的亲戚。

并检查其他"images/figures.png"图像,看看它是否来自SFML因任何原因无法加载的图像(并尝试使用不同的选项重新导出gimp,例如隔行扫描)

答案 1 :(得分:0)

问题已解决,事实上我忘记在链接器 - >输入设置中删除一个库。我现在只有-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

谢谢你的帮助!

答案 2 :(得分:0)

我猜测(来自C:\Users\部分)你在Windows系统上。

虽然Windows 应该支持斜杠作为路径分隔符,但Windows中的官方路径分隔符是反斜杠。它需要在C ++中进行转义,因此您的完整路径将是:

"C:\\Users\\Mattse\\source\\repos\\Chess\\Chess\\images\\figures.png"