std::vector и спрайты SFML

Суть проблемы такова: создаю вектор для объектов, который нужно будет расширять со временем.

vector<Object> obj
{
Object("obj/mel.png", 500, 200),
}

Ну и вывожу его в цикле окна. Но спрайта на экране я не получаю. Можете подсказать, что не так?

Класс Object:

    class Object {
public:
    int w, h, x, y;
    String File;
    Image image;
    Texture texture;
    Sprite sprite;
    
    Object(String F, float X, float Y) {
        File = F;
        
        image.loadFromFile("" + File);
        texture.loadFromImage(image);
        sprite.setTexture(texture);
        x = X; y = Y;
        this->File = F;
        this->x = X;
        this->y = Y;
        sprite.setPosition(x, y);
        //sprite.setTextureRect(IntRect(0, 0, w, h));
    }
    
};

Ну и в конце цикла while(window.isOpen()) вывожу спрайт:

window.draw(obj[0].sprite);

Ответы (1 шт):

Автор решения: Croessmah

Вы храните текстуры в объектах типа Object. Объекты sf::Sprite хранят указатели на текстуры. Соответственно, при копировании объекта, текстура и спрайт будут скопированы и получится, что указатель в спрайте указывает на текстуру в предыдущем объекте.

vector<Object> obj
{
    Object("obj/mel.png", 500, 200),
}

Создаете временный объект, который копируется в вектор, а затем удаляется, и указатель в спрайте указывает на удаленную текстуру.

И тоже самое будет при реаллокации вектором памяти. Текстуры и спрайты перененутся в другую область памяти, но указатели в спрайтах будут указывать на удаленные текстуры.

→ Ссылка