2017-09-17 7 views
0

resources.h이다 :SF : 스프라이트 흰색 사각형 (참고로 전달하려고 질감)

sf::Sprite Sprite00; 


void load_sprite(sf::Sprite &externalSprite, sf::Texture &externalTexture) 
{ 
    externalSprite.setTexture(externalTexture); 
} 
void draw_sprite(sf::RenderWindow &window, sf::Sprite &externalSprite) 
{ 
    window.draw(externalSprite); 
} 
void setposition_sprite(sf::Sprite &externalSprite, float x, float y) 
{ 
    externalSprite.setPosition(x, y); 
} 

void loadResources() 
{ 
    sf::Texture myTexture; 
    myTexture.loadFromFile("images/block3d.png"); 

    load_sprite(Sprite00, myTexture); 
} 

을 물 :

extern sf::Sprite Sprite00; 

void load_sprite(sf::Sprite &externalSprite, sf::Texture &externalTexture) ; 
void draw_sprite(sf::RenderWindow &window, sf::Sprite &externalSprite); 
void setposition_sprite(sf::Sprite &externalSprite, float x, float y); 

인 resources.cpp game.cpp :

void Game::render() 
{ 
    window.clear(); 

    setposition_sprite(Sprite00, 100, 100); 
    draw_sprite(window, Sprite00); 

    window.display(); 
} 

표시된 스프라이트가 흰색 사각형이며 텍스처가 손실됩니다. 나는 그것을 고치는 법을 모른다. 내가 정확하게 참조를 전달하지 않을거야.

main.cpp에서 loadResources가 호출됩니다. 이 Sprite00을 예를 들어 Game.cpp의 Game :: render(); 함수에 표시하려고합니다. 또한 내가 그것을 다른 cpp에 다른 곳에 표시하고 싶다면 무엇을해야 제대로 할 수 있을까?

+0

"main.cpp에서 loadResources가 호출되었습니다."코드가 발생했거나 발생하지 않았습니다. MVCE를 구성하면 신음하고 어리석은 느낌을주지 않으면 서 [mcve]를 만들고 게시하십시오. – user4581301

답변

2

sf::Sprite에는 사용자가 지정한 텍스처에 대한 포인터가 저장됩니다. 그러나 loadResources 함수에서 로컬 sf::Texture 개체를 만들고이를 스프라이트에 적용하고 있습니다. 함수가 돌아 오면 텍스처가 파괴되고 스프라이트에 매달린 포인터가 남아있게됩니다. 적어도 스프라이트 사용 기간을 감안하여 텍스처의 수명을 보장해야합니다.

the documentationsf::Sprite 클래스의 설명을 정확히 무슨 일을 상대로 단락 경고 가지고 :

김포 :: Sprite 인스턴스가 질감을 복사하지 않는 것이 중요합니다을 그것을 사용하는 경우에만 참조를 유지합니다. 따라서 sf :: Texture는 sf :: Sprite 에 의해 사용되는 동안 파괴되어서는 안됩니다. 즉, 스프라이트 생성에 로컬 sf :: Texture 인스턴스 을 사용하는 함수를 작성하지 마십시오.

+0

그래서이 스프라이트를 다른 파일의이 텍스처로 어떻게 사용할 수 있습니까? – Sadin97

+0

@ Sadin97 : 당신이 묻는 것을 이해하지 못합니다. 제발 좀 더 자세히 설명해주세요. –

+0

기본적으로 나는 당신이 무슨 말을하고 있는지 이해합니다. 내 질문은 어떻게 다른 파일에 텍스처를 전달할 수 있습니다 (예를 들어 sf :: Sprite 및 sf :: Texture를 하나의 파일 (resources.cpp/resources.h)에 정의하고 다른 파일에서 사용하려는 경우 (예 : game.cpp) 어떻게 제대로 전달할 수 있습니까? 다른 파일에서 해당 로컬 텍스처를 어떻게 사용할 수 있습니까, 그 텍스처를 정의하는 방법, 정의해야하는 위치 및 다른 곳에서 사용하는 방법은 무엇입니까? 어떻게? – Sadin97