如何在SFML C ++中传递图像

时间:2012-11-29 00:25:46

标签: c++ image sfml

我正在尝试创建一个简单的函数或类来选择一个图像并将其返回或以某种方式传递给另一个类。知道图像的类型是否简单?还是我需要做别的事?我在Windows 8计算机上运行Code :: Blocks 10.05和GNU GCC编译器。任何帮助表示赞赏。

感谢Esthete,我取得了一些进展。现在我有了这个:

class Background{
    sf::Image BGI;
    sf::Sprite BG;
    Image& img;

    public:
    void rimage(std::string name){
        sf::Image extra;
        extra.LoadFromFile(name);
        img = extra;
    }
    void init(std::string name){
    BGI = img
    BG.SetPosition(0.f,0.f);
    BG.SetImage(BGI);

    }
};

但是当我运行它时,我明白了:

 ...4 error: ISO C++ forbids declaration of 'Image" with no type 

此外,

...10 error: 'img' is defined in this scope

我已经包含了运行SFML所需的库,我只是把它留下来保持干净,我调整了上面出现的错误的行,以便更容易理解。

img现在不是背景中的全局变量吗? 我认为Image&img的类型......这里需要改变什么?

1 个答案:

答案 0 :(得分:3)

您不需要load方法,也不需要任何额外的Image个对象。您可以在构造函数中执行所有这些处理。

class Background{
  private:
    // You only need an image and a background, if that.
    sf::Image BGI;
    sf::Sprite BG;

  public:
    // Use a constructor.
    Background(std::string name)
    {
      SetBackground(name, Vector2f(0.f, 0.f));
    }
    void SetBackground(std::string name, sf::Vector2f pos)
    {
      BGI.LoadFromFile(name);
      BG.SetImage(BGI);
      BG.SetPosition(pos);
    }
};

// Constructor loads image, sets image to sprite, and set sprite position.
Background bg("MyBackground.png");

// You can change the background image an position like so.
bg.SetBackgrond("newImage.png", Vector2f(10.f, 20.f));