0

我正在尝试制作一个简单的函数或类来选择图像并将其返回或以某种方式将其传递给不同的类。是否像知道图像被认为是什么类型一样简单?还是我需要做其他事情?我在 Windows 8 计算机上使用 GNU GCC 编译器运行 Code::Blocks 10.05。任何帮助表示赞赏。

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

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......这里需要改变什么?

4

1 回答 1

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));
于 2012-11-29T00:32:37.013 回答