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 шт):
Вы храните текстуры в объектах типа Object. Объекты sf::Sprite хранят указатели на текстуры. Соответственно, при копировании объекта, текстура и спрайт будут скопированы и получится, что указатель в спрайте указывает на текстуру в предыдущем объекте.
vector<Object> obj
{
Object("obj/mel.png", 500, 200),
}
Создаете временный объект, который копируется в вектор, а затем удаляется, и указатель в спрайте указывает на удаленную текстуру.
И тоже самое будет при реаллокации вектором памяти. Текстуры и спрайты перененутся в другую область памяти, но указатели в спрайтах будут указывать на удаленные текстуры.