【问题标题】:Cannot load an image file as texture using C++ and SFML 2.1无法使用 C++ 和 SFML 2.1 将图像文件加载为纹理
【发布时间】:2014-11-22 14:49:52
【问题描述】:

我正在尝试使用 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;
}

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

链接器 -> 常规 (http://i.stack.imgur.com/NZg7P.png):

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

**请注意,如果我没有像以前那样配置 SFML 库,那么我的系统会收到一条错误消息 msvcr110d.dll is missing

【问题讨论】:

  • 我刚刚使用 VS Express 2013 和你的确切源代码,我得到了同样的错误!所以它不仅仅是你的机器。我想弄清楚为什么会这样!

标签: c++ visual-studio textures sfml


【解决方案1】:

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

  1. 将您的子系统设置为 WINDOWS:
  2. 将“sfml-main.lib”添加到您的库中:
  3. 将运行时库更改为 /MD。这是因为您没有使用 SFML 2.1 库的调试版本(在 VS2013 中可能无法使用)。
  4. 确保您的“fighter jet.png”图片位于正确的位置。默认情况下,Visual Studio 使用项目目录作为工作目录。因此,请将 png 文件与您的 vcxproj 文件放在同一文件夹中。

【讨论】:

  • 修复了我绘制精灵的问题;)+1
【解决方案2】:

你确定图片在你程序的执行目录下吗? 您应该避免文件名中出现空格 (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;
}

【讨论】:

  • 我尝试了您建议的两种情况(绝对路径和删除文件名中的空格),但仍然遇到相同的错误
  • 好的,我添加了一个游戏循环,你可以试试吗?
  • (编辑)你能用另一张照片试试吗? (更新的)代码可以在我的系统上运行,其中包含我的一张照片。
  • 查看更新。我感谢您的帮助。我开始认为问题出在我下载的 SFML 版本上。我有 MS Visual C++ 2011 的 2.1 版(32 位),但我有 MS Visual Studio Professional 2013。你怎么看?
  • 对不起,我没有MSVC技能,我在Windows下使用C::B,一开始我也遇到了麻烦,找不到正确的 SFML库.. . 您应该尝试使用“hello world”代码,即不涉及图片的代码,以及其他 SFML lib 32/64,直到找到正确的代码。
猜你喜欢
  • 2020-05-06
  • 1970-01-01
  • 2012-08-14
  • 2016-04-14
  • 2012-04-21
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2019-07-03
相关资源
最近更新 更多