2016-07-25 6 views
0

media (sf::Sprite) 및 mediaTexture (sf::Texture)을 저장하는 DBObject가 있습니다. 이 DBObjects가 std::vector에 저장됩니다SFML의 흰색 사각형이지만 텍스처가 잘로드됩니다.

void DBObject::loadMedia() { 
    myStream mediaStream(mediaPath); 
    mediaTexture.loadFromStream(mediaStream); 
    media.setTexture(mediaTexture); 
    mediaInit = true; 
} 

: 이것은 내 DBObject::loadMedia() 기능입니다.

디스플레이에 스프라이트를 그리려고 할 때, 완전히 흰색이며 분명히 범위를 벗어나는 텍스처에서 나온 것입니다. 하지만 DBObject의 텍스처를 정의하므로 객체의 수명이 있어야합니다 ... 맞습니까?

그러나 main() 함수에서 NEW 스프라이트를 만들고 newSprite.setTexture(DBObj.mediaTexture)을 만들면 잘 표시되므로 텍스처 자체가 잘로드되지만 스프라이트에 뭔가가 일어나고 있습니다.

답변

1

이것을 the white square problem이라고합니다.

기본적으로 개체가 복사되지만 복사 생성자는 복사 된 텍스처를 사용하기 위해 복사 된 스프라이트 텍스처를 업데이트하지 않으며 원본 텍스처가 손상되어 복사 된 스프라이트에 유효한 텍스처가 더 이상 존재하지 않습니다. . 이것은 예를 들어 std::vector이 더 많은 메모리를 할당하고 물건을 이동/복사해야 할 때 발생할 수 있습니다.

+0

그래서 변경하려면 어떻게해야합니까? 계속해서 텍스처로 스프라이트를 계속 업데이트 하시겠습니까? – TheAbelo2

+0

아니요, 복사 할 때 사용자 지정 복사본 생성자를 사용합니다. – Hiura

+0

감사합니다. 사용자 지정 복사본을 추가했는데 이제는 정상적으로 작동합니다. :) – TheAbelo2

관련 문제