sfml 스프라이트 클래스. setTexure() 메서드는 iterator의 생성자 내부에서 작동하지 않지만 iterator가 이미 만들어 졌을 때 작동합니다.클래스 .setTexure() 메서드가 다르게 동작하는 이유는 무엇입니까?
우리는 창에 그려지는 프레임에 대한 구조체를 구성하려고합니다. Sprite와 Texture 클래스를 가진 sfml 라이브러리를 사용하고 있습니다. frameData 구조체의 생성자에서 파일에서 텍스처를로드 한 다음 .setTexture() 메서드를 사용하여 스프라이트에 적용합니다. 프로그램을 컴파일하고 실행할 때 시스템에 따라 흰색 블록이나 프로그램 충돌이 발생합니다.
frameData의 생성자 외부에서 .setTexture()를 사용하여 텍스처에 대한 포인터 참조를 만드는 경우 작동합니다!
모두 이것은 다른 프레임을 반복하는 iterator 구조체 인 경우 모두입니다. 여기에 관련 코드이며, 우선이가 FrameData 구조체의 헤더에 있습니다, 여기에 실제 생성자가 작동하지입니다
private:
struct FrameData
{
FrameData(const std::string& fileName, int frameDelay);
sf::Texture texture;
sf::Sprite sprite;
unsigned int frameDelay;
};
둘째 :
const sf::Sprite& SpriteAnimator::currentFrame() const
{
return currentFrame_->sprite;
}
SpriteAnimator::FrameData::FrameData(const std::string& fileName, int frameDelay)
: frameDelay(frameDelay)
{
texture.loadFromFile(fileName);
sprite.setTexture(texture);
}
그리고 셋째로, 여기에서 작업을 수행 무엇인가 :
const sf::Sprite& SpriteAnimator::currentFrame() const
{
currentFrame_->sprite.setTexture(currentFrame_->texture);
return currentFrame_->sprite;
}
SpriteAnimator::FrameData::FrameData(const std::string& fileName, int frameDelay)
: frameDelay(frameDelay)
{
texture.loadFromFile(fileName);
sprite.setTexture(texture);
}
왜 이런 일이 발생했는지에 대한 아이디어가 누락 되었습니까? 생성자가 제대로 작동하도록하려면 현재 프레임이 텍스처가 변경되는 것보다 더 자주 반환되므로 현재 프레임이 반환 될 때마다 텍스처를 업데이트 할 필요가 없습니다.
감사합니다.
나는 이와 비슷한 문제가있었습니다. 내 해결책은 모든 텍스처를 클래스 외부의 컨테이너에 저장하고 텍스처 자체 대신 텍스처에 대한 포인터를 사용하는 것이 었습니다. 클래스에서 다른 객체를 만들려는 경우 동일한 텍스처를 2 개 이상 저장할 필요가 없기 때문에 한 개의 돌로 2 개의 새를 죽입니다. – elimirks
그래서 문제는 포인터가 아닌 텍스처 자체를 사용한다고 생각하십니까? 그것이 문서화되어 있는지 궁금합니다. 고맙습니다! – s3binator
질문을 해결 했으므로 솔루션을 답변으로 게시 할 수 있습니까? 그렇게하면 다른 모든 SO 사용자들에게는 공개적인 질문이되지 않습니다. 감사! – Tim