SFML图像未加载

时间:2013-11-25 20:54:49

标签: c++ xcode image load sfml

我正在使用Xcode和SFML。我将我的文件放在Xcode项目中,该项目将其复制到目录中。但是,我仍然无法将其加载到程序中。有什么想法吗?

代码:

int main(int argc, const char * argv[])
{
    sf::RenderWindow(window);
    window.create(sf::VideoMode(800, 600), "My window");

    sf::Texture img;
    if(!img.loadFromFile("colorfull small.jpg")) return 0;

    sf::Sprite sprite;
    sprite.setTexture(img);

    window.draw(sprite);
    window.display();

    while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed) window.close();
        }
    }
    return 0;
}

编译器: enter image description here

目录: enter image description here

谢谢

3 个答案:

答案 0 :(得分:2)

错误有几个原因:

来自sfml documentation

  

不支持某些格式选项,例如渐进式jpeg。

它找不到文件,因为文件名中有空格(重命名文件,例如colorfull_small.jpg)

该程序的工作目录没有.jpg文件(您可以使用getcwd(NULL)打印(#include <unistd.h>中提供))

答案 1 :(得分:2)

我有点惊讶的是,“正确答案”有一条评论说它不起作用......无论如何:

您的渲染(绘图)需要在循环的每次迭代中进行:

int main(int argc, const char * argv[])
{
    sf::RenderWindow(window);
    window.create(sf::VideoMode(800, 600), "My window");

    sf::Texture img;
    if(!img.loadFromFile("colorfull small.jpg")) return 0;

    sf::Sprite sprite;
    sprite.setTexture(img);

     while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed) window.close();
        }

        // drawing needs to take place every loop right HERE 
        window.clear();
        window.draw(sprite);
        window.display();
    }

    return 0;
}

答案 2 :(得分:1)

引用the official tutorial

  

该项目在main.cpp中有一个基本示例和一个辅助函数:std :: string resourcePath(void);在ResourcePath.hpp和ResourcePath.mm中。如提供的示例所示,此函数的用处是以方便的方式访问应用程序包的Res​​ources文件夹。

这意味着您必须写下以下内容:

#include "ResourcePath.hpp"
:
:
if (!icon.loadFromFile(resourcePath() + "colorfull small.jpg")) {
:
:

(受项目模板生成的默认代码的启发。)

nvoigt的回答也很重要。