Метод .setTexure() класса спрайтов sfml не работает внутри конструктора для итератора, но работает, когда итератор уже создан
Мы пытаемся создать структуру для фреймов, которые рисуются в окне. Мы используем библиотеку sfml с классами спрайтов и текстур. В конструкторе структуры frameData мы загружаем текстуру из файла, а затем применяем ее к спрайту с помощью метода .setTexture(). Мы либо получаем белый блок, либо сбой программы в зависимости от машины, когда мы компилируем и запускаем нашу программу.
Если мы создадим ссылку на текстуру с помощью .setTexture() вне конструктора для frameData, это сработает!
Все, если это со структурой итератора, которая перебирает разные кадры. Вот соответствующий код. Сначала он находится в заголовке структуры 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);
}
Любые идеи о том, почему это происходит, мы что-то упускаем? Мы хотим, чтобы конструктор работал правильно, текущий кадр возвращается намного чаще, чем изменение текстуры, поэтому нам не нужно обновлять текстуру каждый раз, когда возвращается текущий кадр.
Спасибо!