2012-11-29 3 views
0

이미지를 선택하고 반환하거나 어떤 방식으로 다른 클래스로 전달하는 간단한 함수 나 클래스를 만들려고합니다. 이미지가 어떤 유형으로 간주되는지를 아는 것만 큼 간단합니까? 아니면 다른 일을해야합니까? Windows 8 컴퓨터에서 GNU GCC 컴파일러로 Code :: Blocks 10.05를 실행하고 있습니다. 어떤 도움을 주셔서 감사합니다.SFML C++로 이미지를 전달하는 방법

에스테 덕분에 나는 약간의 진전을 이루었습니다. 이제이 있습니다

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

    } 
}; 

을하지만 그것을 실행할 때, 나는이 얻을 : 나는 SFML을 실행하는 데 필요한 라이브러리를 포함했다

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

, 또한

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

, 나는 그것을 깨끗하게 유지하기 위해 그냥 버렸고, 따라하기 쉬운 오류가 발생한 줄을 조정했다.

img가 백그라운드 내에서 전역 변수를 정렬하지 않았습니까? 라고 생각하고 img의 유형이 Image& ... 여기 변경해야합니까?

+0

당신은 무엇을 시도 했습니까? – Cubic

+1

'Image & img'는'sf :: Image img'이어야합니다. 그런 다음 그냥'img.LoadFromFile (name);을 호출하십시오. – Aesthete

+0

Ok sweet, 마지막 한가지, 배열 또는 벡터에이 내용을 저장하려면 배열/벡터를 저장할 위치와 저장할 변수를 배열/벡터? – 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