无法使用C ++和SFML 2.1将图像文件作为纹理加载

时间:2014-09-27 20:50:07

标签: c++ visual-studio textures sfml

我正在尝试使用SFML 2.1,C ++和MS Visual Studio Professional 2013将图像输出到屏幕上。我在尝试将文件加载到纹理时遇到意外错误。它输出一大堆随机字符。我确定它是如何配置Visual Studio的SFML库或代码的问题。有人能解决这个问题吗?感谢。

以下是我运行程序(http://i.stack.imgur.com/uMdLT.png)时的截图:

这是我的代码:

#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
using namespace std;

int main() {

    sf::RenderWindow window;
    window.create(sf::VideoMode(800, 600), "My First SFML Game!"); // initializing

    sf::Texture jetTexture;
    sf::Sprite jetImage;

    // Getting Error here!
    if (!jetTexture.loadFromFile("fighter jet.png"))
        throw std::runtime_error("Could not load fighter jet.png");

    jetImage.setTexture(jetTexture);

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

    return 0;
}

对于所有配置属性,它们如下所示:

链接器 - &gt;一般(http://i.stack.imgur.com/NZg7P.png):

链接器 - &gt;输入(http://i.stack.imgur.com/1tPaB.png):

**请注意,如果我没有按照我的方式配置SFML库,那么我的系统会收到msvcr110d.dll is missing的错误。

2 个答案:

答案 0 :(得分:6)

好的,我设法解决了这个问题,这就是你需要做的事情:

  1. 将您的SUBSYSTEM设置为WINDOWS:
  2. 添加&#34; sfml-main.lib&#34;到您的图书馆:
  3. 将运行时库更改为/ MD。这是因为您没有使用SFML 2.1库的调试版本(并且可能无法在VS2013中使用)。
  4. 确保您的&#34; fighter jet.png&#34;图像是在正确的位置。默认情况下,Visual Studio使用Project Directory作为工作目录。所以将png放在与vcxproj文件相同的文件夹中。

答案 1 :(得分:1)

您确定图片位于程序的执行目录中吗? 你应该避免使用文件名中的空格(fighter_jet.png)。

如果您不确定执行目录,请尝试使用绝对路径(确定它是路径问题,而不是图片问题)。

我希望它有所帮助。

我已经在我的系统(Xcode - OSX)上使用我的一张照片尝试了这个代码,并且它可以正常工作。 你试过另一张照片吗?

#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
using namespace std;

int main() {

    sf::RenderWindow window;
    window.create(sf::VideoMode(800, 600), "My First SFML Game!"); // initializing

    sf::Texture jetTexture;
    sf::Sprite jetImage;

    // Getting Error here!
    if (!jetTexture.loadFromFile("fighter jet.png"))
        throw std::runtime_error("Could not load fighter jet.png");

    jetImage.setTexture(jetTexture);

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

    return 0;
}