2012-11-29 35 views
0

我想做一個簡單的函數或類來選擇圖像並將其返回或以某種方式將其傳遞給不同的類。是否知道圖像被認爲是什麼類型?還是我需要做別的事情?我在Windows 8計算機上運行帶有GNU GCC編譯器的Code :: Blocks 10.05。任何幫助表示讚賞。如何在SFML中傳遞圖像C++

感謝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的類型......這裏需要改變什麼?

+0

你試過了什麼? – Cubic

+1

'Image&img'需要是'sf :: Image img'。然後,只需調用'img.LoadFromFile(name);' – Aesthete

+0

好吧,最後一件事,如果我想將這些東西存儲在一個數組或向量中,我應該如何將數組/向量存儲爲以及應保存哪個變量數組/矢量? – Chachmu

回答

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)); 
+0

看起來不錯,讓我測試一下真的很快,謝謝你的快速回復! – Chachmu

+0

我上面編輯了我的問題,因爲我不確定如何在評論中添加代碼......而我只是想出了方法。 – Chachmu

+1

@ user1429351 - 我已完全更改答案以符合您的更新。 – Aesthete